Mercurial > libavcodec.hg
comparison motion_est.c @ 1729:a4a5e7521339 libavcodec
interlaced dct decision cleanup
function moved to dspcontext
mmx&mmx2 optimized
change SSE -> SAD as default (better quality)
vbv buffer size command line option in kbyte
author | michael |
---|---|
date | Mon, 05 Jan 2004 22:57:07 +0000 |
parents | dea5b2946999 |
children | 07a484280a82 |
comparison
equal
deleted
inserted
replaced
1728:73a3699b8375 | 1729:a4a5e7521339 |
---|---|
275 #undef CMP_HPEL | 275 #undef CMP_HPEL |
276 #undef CMP_QPEL | 276 #undef CMP_QPEL |
277 #undef INIT | 277 #undef INIT |
278 #undef CMP__DIRECT | 278 #undef CMP__DIRECT |
279 | 279 |
280 | |
281 static int zero_cmp(void *s, uint8_t *a, uint8_t *b, int stride, int h){ | |
282 return 0; | |
283 } | |
284 | |
285 static void set_cmp(MpegEncContext *s, me_cmp_func *cmp, int type){ | |
286 DSPContext* c= &s->dsp; | |
287 int i; | |
288 | |
289 memset(cmp, 0, sizeof(void*)*5); | |
290 | |
291 for(i=0; i<4; i++){ | |
292 switch(type&0xFF){ | |
293 case FF_CMP_SAD: | |
294 cmp[i]= c->sad[i]; | |
295 break; | |
296 case FF_CMP_SATD: | |
297 cmp[i]= c->hadamard8_diff[i]; | |
298 break; | |
299 case FF_CMP_SSE: | |
300 cmp[i]= c->sse[i]; | |
301 break; | |
302 case FF_CMP_DCT: | |
303 cmp[i]= c->dct_sad[i]; | |
304 break; | |
305 case FF_CMP_PSNR: | |
306 cmp[i]= c->quant_psnr[i]; | |
307 break; | |
308 case FF_CMP_BIT: | |
309 cmp[i]= c->bit[i]; | |
310 break; | |
311 case FF_CMP_RD: | |
312 cmp[i]= c->rd[i]; | |
313 break; | |
314 case FF_CMP_ZERO: | |
315 cmp[i]= zero_cmp; | |
316 break; | |
317 default: | |
318 av_log(s->avctx, AV_LOG_ERROR,"internal error in cmp function selection\n"); | |
319 } | |
320 } | |
321 } | |
322 | |
323 static inline int get_penalty_factor(MpegEncContext *s, int type){ | 280 static inline int get_penalty_factor(MpegEncContext *s, int type){ |
324 switch(type&0xFF){ | 281 switch(type&0xFF){ |
325 default: | 282 default: |
326 case FF_CMP_SAD: | 283 case FF_CMP_SAD: |
327 return s->qscale*2; | 284 return s->qscale*2; |
338 return (s->qscale*s->qscale*185 + 64)>>7; | 295 return (s->qscale*s->qscale*185 + 64)>>7; |
339 } | 296 } |
340 } | 297 } |
341 | 298 |
342 void ff_init_me(MpegEncContext *s){ | 299 void ff_init_me(MpegEncContext *s){ |
343 set_cmp(s, s->dsp.me_pre_cmp, s->avctx->me_pre_cmp); | 300 ff_set_cmp(&s->dsp, s->dsp.me_pre_cmp, s->avctx->me_pre_cmp); |
344 set_cmp(s, s->dsp.me_cmp, s->avctx->me_cmp); | 301 ff_set_cmp(&s->dsp, s->dsp.me_cmp, s->avctx->me_cmp); |
345 set_cmp(s, s->dsp.me_sub_cmp, s->avctx->me_sub_cmp); | 302 ff_set_cmp(&s->dsp, s->dsp.me_sub_cmp, s->avctx->me_sub_cmp); |
346 set_cmp(s, s->dsp.mb_cmp, s->avctx->mb_cmp); | 303 ff_set_cmp(&s->dsp, s->dsp.mb_cmp, s->avctx->mb_cmp); |
347 | 304 |
348 if(s->flags&CODEC_FLAG_QPEL){ | 305 if(s->flags&CODEC_FLAG_QPEL){ |
349 if(s->avctx->me_sub_cmp&FF_CMP_CHROMA) | 306 if(s->avctx->me_sub_cmp&FF_CMP_CHROMA) |
350 s->me.sub_motion_search= simple_chroma_qpel_motion_search; | 307 s->me.sub_motion_search= simple_chroma_qpel_motion_search; |
351 else | 308 else |
1781 if(fimin < INT_MAX && bimin < INT_MAX){ | 1738 if(fimin < INT_MAX && bimin < INT_MAX){ |
1782 type |= CANDIDATE_MB_TYPE_BIDIR_I; | 1739 type |= CANDIDATE_MB_TYPE_BIDIR_I; |
1783 } | 1740 } |
1784 //FIXME something smarter | 1741 //FIXME something smarter |
1785 if(dmin>256*256*16) type&= ~CANDIDATE_MB_TYPE_DIRECT; //dont try direct mode if its invalid for this MB | 1742 if(dmin>256*256*16) type&= ~CANDIDATE_MB_TYPE_DIRECT; //dont try direct mode if its invalid for this MB |
1743 #if 0 | |
1744 if(s->out_format == FMT_MPEG1) | |
1745 type |= CANDIDATE_MB_TYPE_INTRA; | |
1746 #endif | |
1786 } | 1747 } |
1787 | 1748 |
1788 s->mb_type[mb_y*s->mb_stride + mb_x]= type; | 1749 s->mb_type[mb_y*s->mb_stride + mb_x]= type; |
1789 } | 1750 } |
1790 | 1751 |