diff mpeg12.c @ 1668:30746f429df6 libavcodec

move motion_val & mb_type to AVFrame patch by (Wolfgang Hesseler <qv at multimediaware dot com>) cleanups & fixes by me
author michael
date Tue, 09 Dec 2003 01:49:56 +0000
parents c92147a61d97
children 1c9e8e499c56
line wrap: on
line diff
--- a/mpeg12.c	Mon Dec 08 18:26:22 2003 +0000
+++ b/mpeg12.c	Tue Dec 09 01:49:56 2003 +0000
@@ -2131,32 +2131,50 @@
         dprintf("ret=%d\n", ret);
         if (ret < 0)
             return -1;
-            
-        if(s->motion_val && s->pict_type != B_TYPE){ //note motion_val is normally NULL unless we want to extract the MVs
+
+        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_x, motion_y;
-
+            int motion_for_x, motion_for_y, motion_back_x, motion_back_y;
             if (s->mb_intra) {
-                motion_x = motion_y = 0;
-            }else if (s->mv_type == MV_TYPE_16X16) {
-                motion_x = s->mv[0][0][0];
-                motion_y = s->mv[0][0][1];
-            } else /*if (s->mv_type == MV_TYPE_FIELD)*/ {
-                motion_x = s->mv[0][0][0] + s->mv[0][1][0];
-                motion_y = s->mv[0][0][1] + s->mv[0][1][1];
-                motion_x = (motion_x>>1) | (motion_x&1);
+                motion_for_x = motion_for_y = motion_back_x = motion_back_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];                
+            } 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);
             }
-            s->motion_val[xy][0] = motion_x;
-            s->motion_val[xy][1] = motion_y;
-            s->motion_val[xy + 1][0] = motion_x;
-            s->motion_val[xy + 1][1] = motion_y;
-            s->motion_val[xy + wrap][0] = motion_x;
-            s->motion_val[xy + wrap][1] = motion_y;
-            s->motion_val[xy + 1 + wrap][0] = motion_x;
-            s->motion_val[xy + 1 + wrap][1] = motion_y;
+
+            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;
+
+            if(s->pict_type != B_TYPE){
+                motion_back_x = motion_back_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->dest[0] += 16;
         s->dest[1] += 8;
         s->dest[2] += 8;