Mercurial > libavcodec.hg
comparison motion_est_template.c @ 2189:70b27300a496 libavcodec
quad tree based motion compensation (currently only 16x16 & 8x8 OBMC blocks, but can be extended to other block sizes easily)
different intra block coding (previous was just an ugly hack)
1.8% bitrate reduction -0.01PSNR (foreman@352x288 qscale=8)
1.5% bitrate reduction +0.05PSNR (foreman@352x288 qscale=1)
author | michael |
---|---|
date | Thu, 26 Aug 2004 20:04:54 +0000 |
parents | 3378d0677903 |
children | 4306aa6f8f16 |
comparison
equal
deleted
inserted
replaced
2188:226d0a39347d | 2189:70b27300a496 |
---|---|
219 | 219 |
220 return dmin; | 220 return dmin; |
221 } | 221 } |
222 #endif | 222 #endif |
223 | 223 |
224 static int inline get_mb_score(MpegEncContext * s, int mx, int my, int src_index, | 224 int inline ff_get_mb_score(MpegEncContext * s, int mx, int my, int src_index, |
225 int ref_index) | 225 int ref_index, int size, int h, int add_rate) |
226 { | 226 { |
227 // const int check_luma= s->dsp.me_sub_cmp != s->dsp.mb_cmp; | 227 // const int check_luma= s->dsp.me_sub_cmp != s->dsp.mb_cmp; |
228 MotionEstContext * const c= &s->me; | 228 MotionEstContext * const c= &s->me; |
229 const int size= 0; | |
230 const int h= 16; | |
231 const int penalty_factor= c->mb_penalty_factor; | 229 const int penalty_factor= c->mb_penalty_factor; |
232 const int flags= c->mb_flags; | 230 const int flags= c->mb_flags; |
233 const int qpel= flags & FLAG_QPEL; | 231 const int qpel= flags & FLAG_QPEL; |
234 const int mask= 1+2*qpel; | 232 const int mask= 1+2*qpel; |
235 me_cmp_func cmp_sub, chroma_cmp_sub; | 233 me_cmp_func cmp_sub, chroma_cmp_sub; |
240 //FIXME factorize | 238 //FIXME factorize |
241 | 239 |
242 cmp_sub= s->dsp.mb_cmp[size]; | 240 cmp_sub= s->dsp.mb_cmp[size]; |
243 chroma_cmp_sub= s->dsp.mb_cmp[size+1]; | 241 chroma_cmp_sub= s->dsp.mb_cmp[size+1]; |
244 | 242 |
245 assert(!c->skip); | 243 // assert(!c->skip); |
246 assert(c->avctx->me_sub_cmp != c->avctx->mb_cmp); | 244 // assert(c->avctx->me_sub_cmp != c->avctx->mb_cmp); |
247 | 245 |
248 d= cmp(s, mx>>(qpel+1), my>>(qpel+1), mx&mask, my&mask, size, h, ref_index, src_index, cmp_sub, chroma_cmp_sub, flags); | 246 d= cmp(s, mx>>(qpel+1), my>>(qpel+1), mx&mask, my&mask, size, h, ref_index, src_index, cmp_sub, chroma_cmp_sub, flags); |
249 //FIXME check cbp before adding penalty for (0,0) vector | 247 //FIXME check cbp before adding penalty for (0,0) vector |
250 if(mx || my || size>0) | 248 if(add_rate && (mx || my || size>0)) |
251 d += (mv_penalty[mx - pred_x] + mv_penalty[my - pred_y])*penalty_factor; | 249 d += (mv_penalty[mx - pred_x] + mv_penalty[my - pred_y])*penalty_factor; |
252 | 250 |
253 return d; | 251 return d; |
254 } | 252 } |
255 | 253 |