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