cygwin fix and dont average interlaced MVs patch by (Wolfgang Hesseler <qv at multime...
authorWolfgang Hesseler <qv@multimediaware.com>
Sun, 14 Dec 2003 17:47:23 +0000 (17:47 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 14 Dec 2003 17:47:23 +0000 (17:47 +0000)
Originally committed as revision 2609 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/mpeg12.c
libavformat/file.c

index 3037c9d8b3bdb099b18d92378b5bea865c03fe39..69a41dda1f8e663a4bcd2dc75831b41a4dc3d0cc 100644 (file)
@@ -2164,44 +2164,48 @@ static int mpeg_decode_slice(AVCodecContext *avctx,
         if(s->current_picture.motion_val[0]){ //note motion_val is normally NULL unless we want to extract the MVs
             const int wrap = s->block_wrap[0];
             const int xy = s->mb_x*2 + 1 + (s->mb_y*2 +1)*wrap;
-            int motion_for_x, motion_for_y, motion_back_x, motion_back_y;
+            int motion_for_top_x, motion_for_top_y, motion_back_top_x, motion_back_top_y;
+            int motion_for_bottom_x, motion_for_bottom_y, motion_back_bottom_x, motion_back_bottom_y;
             if (s->mb_intra) {
-                motion_for_x = motion_for_y = motion_back_x = motion_back_y = 0;
+                motion_for_top_x = motion_for_top_y = motion_back_top_x = motion_back_top_y =
+                motion_for_bottom_x = motion_for_bottom_y = motion_back_bottom_x = motion_back_bottom_y = 0;
             }else if (s->mv_type == MV_TYPE_16X16){
-                motion_for_x = s->mv[0][0][0];
-                motion_for_y = s->mv[0][0][1];
-                motion_back_x = s->mv[1][0][0];
-                motion_back_y = s->mv[1][0][1];                
+                motion_for_top_x = motion_for_bottom_x = s->mv[0][0][0];
+                motion_for_top_y = motion_for_bottom_y = s->mv[0][0][1];
+                motion_back_top_x = motion_back_bottom_x = s->mv[1][0][0];
+                motion_back_top_y = motion_back_bottom_y = s->mv[1][0][1];
             } else /*if ((s->mv_type == MV_TYPE_FIELD) || (s->mv_type == MV_TYPE_16X8))*/ {
-                motion_for_x = s->mv[0][0][0] + s->mv[0][1][0];
-                motion_for_y = s->mv[0][0][1] + s->mv[0][1][1];
-                motion_for_x = (motion_for_x>>1) | (motion_for_x&1);
-                motion_back_x = s->mv[1][0][0] + s->mv[1][1][0];
-                motion_back_y = s->mv[1][0][1] + s->mv[1][1][1];
-                motion_back_x = (motion_back_x>>1) | (motion_back_x&1);
+                motion_for_top_x = s->mv[0][0][0];
+                motion_for_top_y = s->mv[0][0][1];
+                motion_for_bottom_x = s->mv[0][1][0];
+                motion_for_bottom_y = s->mv[0][1][1];
+                motion_back_top_x = s->mv[1][0][0];
+                motion_back_top_y = s->mv[1][0][1];
+                motion_back_bottom_x = s->mv[1][1][0];
+                motion_back_bottom_y = s->mv[1][1][1];
             }
 
-            s->current_picture.motion_val[0][xy][0] = motion_for_x;
-            s->current_picture.motion_val[0][xy][1] = motion_for_y;
-            s->current_picture.motion_val[0][xy + 1][0] = motion_for_x;
-            s->current_picture.motion_val[0][xy + 1][1] = motion_for_y;
-            s->current_picture.motion_val[0][xy + wrap][0] = motion_for_x;
-            s->current_picture.motion_val[0][xy + wrap][1] = motion_for_y;
-            s->current_picture.motion_val[0][xy + 1 + wrap][0] = motion_for_x;
-            s->current_picture.motion_val[0][xy + 1 + wrap][1] = motion_for_y;
+            s->current_picture.motion_val[0][xy][0] = motion_for_top_x;
+            s->current_picture.motion_val[0][xy][1] = motion_for_top_y;
+            s->current_picture.motion_val[0][xy + 1][0] = motion_for_top_x;
+            s->current_picture.motion_val[0][xy + 1][1] = motion_for_top_y;
+            s->current_picture.motion_val[0][xy + wrap][0] = motion_for_bottom_x;
+            s->current_picture.motion_val[0][xy + wrap][1] = motion_for_bottom_y;
+            s->current_picture.motion_val[0][xy + 1 + wrap][0] = motion_for_bottom_x;
+            s->current_picture.motion_val[0][xy + 1 + wrap][1] = motion_for_bottom_y;
 
             if(s->pict_type != B_TYPE){
-                motion_back_x = motion_back_y = 0;
+                motion_back_top_x = motion_back_top_y = motion_back_bottom_x = motion_back_bottom_y = 0;
             }
 
-            s->current_picture.motion_val[1][xy][0] = motion_back_x;
-            s->current_picture.motion_val[1][xy][1] = motion_back_y;
-            s->current_picture.motion_val[1][xy + 1][0] = motion_back_x;
-            s->current_picture.motion_val[1][xy + 1][1] = motion_back_y;
-            s->current_picture.motion_val[1][xy + wrap][0] = motion_back_x;
-            s->current_picture.motion_val[1][xy + wrap][1] = motion_back_y;
-            s->current_picture.motion_val[1][xy + 1 + wrap][0] = motion_back_x;
-            s->current_picture.motion_val[1][xy + 1 + wrap][1] = motion_back_y;
+            s->current_picture.motion_val[1][xy][0] = motion_back_top_x;
+            s->current_picture.motion_val[1][xy][1] = motion_back_top_y;
+            s->current_picture.motion_val[1][xy + 1][0] = motion_back_top_x;
+            s->current_picture.motion_val[1][xy + 1][1] = motion_back_top_y;
+            s->current_picture.motion_val[1][xy + wrap][0] = motion_back_bottom_x;
+            s->current_picture.motion_val[1][xy + wrap][1] = motion_back_bottom_y;
+            s->current_picture.motion_val[1][xy + 1 + wrap][0] = motion_back_bottom_x;
+            s->current_picture.motion_val[1][xy + 1 + wrap][1] = motion_back_bottom_y;
         }
 
         s->dest[0] += 16;
index a84823a378aaec5a85a41992e571b1a4b39ea42f..ee1f72a00c334abd963bb48a1ff4af5b594b5fe4 100644 (file)
@@ -42,7 +42,7 @@ static int file_open(URLContext *h, const char *filename, int flags)
     } else {
         access = O_RDONLY;
     }
-#if defined(CONFIG_WIN32) || defined(CONFIG_OS2)
+#if defined(CONFIG_WIN32) || defined(CONFIG_OS2) || defined(__CYGWIN__)
     access |= O_BINARY;
 #endif
     fd = open(filename, access, 0666);