diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 86d9b6f586..b84c905337 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -426,6 +426,7 @@ typedef struct AVCodecContext { #define FF_BUG_UMP4 8 #define FF_BUG_NO_PADDING 16 #define FF_BUG_AC_VLC 32 +#define FF_BUG_QPEL_CHROMA 64 //#define FF_BUG_FAKE_SCALABILITY 16 //autodetection should work 100% /** diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index b8ea14c34c..653a2a8708 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -372,6 +372,10 @@ uint64_t time= rdtsc(); s->workaround_bugs|= FF_BUG_UMP4; s->workaround_bugs|= FF_BUG_AC_VLC; } + + if(s->divx_version){ + s->workaround_bugs|= FF_BUG_QPEL_CHROMA; + } //printf("padding_bug_score: %d\n", s->padding_bug_score); #if 0 if(s->divx_version==500) diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index dff8fffe75..7fadcc2a0f 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -1384,7 +1384,7 @@ static inline void qpel_motion(MpegEncContext *s, if(field_based){ mx= motion_x/2; my= motion_y>>1; - }else if(s->divx_version){ + }else if(s->workaround_bugs&FF_BUG_QPEL_CHROMA){ mx= (motion_x>>1)|(motion_x&1); my= (motion_y>>1)|(motion_y&1); }else{