From 03e93d35b0167a7f163a0e480567e97260920d08 Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Tue, 22 Oct 2002 18:55:20 +0000
Subject: [PATCH] xvid qpel bug workaround

Originally committed as revision 1063 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavcodec/avcodec.h   | 1 +
 libavcodec/h263dec.c   | 4 ++++
 libavcodec/mpegvideo.c | 2 +-
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 86d9b6f586a..b84c9053371 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 b8ea14c34c1..653a2a8708b 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 dff8fffe75e..7fadcc2a0f9 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{
-- 
GitLab