diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/motion_est.c')
-rw-r--r-- | src/libffmpeg/libavcodec/motion_est.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/libffmpeg/libavcodec/motion_est.c b/src/libffmpeg/libavcodec/motion_est.c index 695111c78..c1779491f 100644 --- a/src/libffmpeg/libavcodec/motion_est.c +++ b/src/libffmpeg/libavcodec/motion_est.c @@ -178,7 +178,7 @@ static always_inline int cmp(MpegEncContext *s, const int x, const int y, const }else d= 256*256*256*32; }else{ - int uvdxy; + int uvdxy; /* no, it might not be used uninitialized */ if(dxy){ if(qpel){ c->qpel_put[size][dxy](c->temp, ref[0] + x + y*stride, stride); //FIXME prototype (add h) @@ -444,7 +444,7 @@ static int log_motion_search(MpegEncContext * s, } while (range >= 1); #ifdef DEBUG - fprintf(stderr, "log - MX: %d\tMY: %d\n", mx, my); + av_log(s->avctx, AV_LOG_DEBUG, "log - MX: %d\tMY: %d\n", mx, my); #endif *mx_ptr = mx; *my_ptr = my; @@ -533,7 +533,7 @@ static int phods_motion_search(MpegEncContext * s, } while (range >= 1); #ifdef DEBUG - fprintf(stderr, "phods - MX: %d\tMY: %d\n", mx, my); + av_log(s->avctx, AV_LOG_DEBUG, "phods - MX: %d\tMY: %d\n", mx, my); #endif /* half pixel search */ @@ -1566,7 +1566,6 @@ static inline int check_bidir_mv(MpegEncContext * s, MotionEstContext * const c= &s->me; uint8_t * const mv_penalty= c->mv_penalty[s->f_code] + MAX_MV; // f_code of the prev frame int stride= c->stride; - int uvstride= c->uvstride; uint8_t *dest_y = c->scratchpad; uint8_t *ptr; int dxy; @@ -1894,11 +1893,16 @@ int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type) { if(s->me_method>=ME_EPZS){ int score[8]; - int i, y, range= s->avctx->me_range; + int i, y, range= s->avctx->me_range ? s->avctx->me_range : (INT_MAX/2); uint8_t * fcode_tab= s->fcode_tab; int best_fcode=-1; int best_score=-10000000; + if(s->msmpeg4_version) + range= FFMIN(range, 16); + else if(s->codec_id == CODEC_ID_MPEG2VIDEO && s->avctx->strict_std_compliance >= FF_COMPLIANCE_NORMAL) + range= FFMIN(range, 256); + for(i=0; i<8; i++) score[i]= s->mb_num*(8-i); for(y=0; y<s->mb_height; y++){ @@ -1912,11 +1916,9 @@ int ff_get_best_fcode(MpegEncContext * s, int16_t (*mv_table)[2], int type) fcode_tab[my + MAX_MV]); int j; - if(range){ if(mx >= range || mx < -range || my >= range || my < -range) continue; - } for(j=0; j<fcode && j<8; j++){ if(s->pict_type==B_TYPE || s->current_picture.mc_mb_var[xy] < s->current_picture.mb_var[xy]) @@ -1953,9 +1955,10 @@ void ff_fix_long_p_mvs(MpegEncContext * s) int y, range; assert(s->pict_type==P_TYPE); - range = (((s->out_format == FMT_MPEG1) ? 8 : 16) << f_code); - - if(s->msmpeg4_version) range= 16; + range = (((s->out_format == FMT_MPEG1 || s->msmpeg4_version) ? 8 : 16) << f_code); + + assert(range <= 16 || !s->msmpeg4_version); + assert(range <=256 || !(s->codec_id == CODEC_ID_MPEG2VIDEO && s->avctx->strict_std_compliance >= FF_COMPLIANCE_NORMAL)); if(c->avctx->me_range && range > c->avctx->me_range) range= c->avctx->me_range; @@ -2003,9 +2006,8 @@ void ff_fix_long_mvs(MpegEncContext * s, uint8_t *field_select_table, int field_ int y, h_range, v_range; // RAL: 8 in MPEG-1, 16 in MPEG-4 - int range = (((s->out_format == FMT_MPEG1) ? 8 : 16) << f_code); + int range = (((s->out_format == FMT_MPEG1 || s->msmpeg4_version) ? 8 : 16) << f_code); - if(s->msmpeg4_version) range= 16; if(c->avctx->me_range && range > c->avctx->me_range) range= c->avctx->me_range; h_range= range; |