mpeg2 fps fix by Ivan Kalvatchev <iive@yahoo.com>
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>
Sun, 14 Oct 2001 17:29:49 +0000 (17:29 +0000)
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>
Sun, 14 Oct 2001 17:29:49 +0000 (17:29 +0000)
git-svn-id: svn://git.mplayerhq.hu/mplayer/trunk@2197 b3059339-0415-0410-9bf9-f77b7e298cf2

libmpeg2/header.c
libmpeg2/mpeg2_internal.h
mplayer.c

index ab5e129..331fcf1 100644 (file)
@@ -203,6 +203,7 @@ static int header_process_picture_coding_extension (picture_t * picture, uint8_t
     picture->repeat_first_field = (buffer[3] >> 1) & 1;
     picture->progressive_frame = buffer[4] >> 7;
 
+#if 0
     // repeat_first implementation by A'rpi/ESP-team, based on libmpeg3:
     if(picture->repeat_count>=100) picture->repeat_count=0;
     if(picture->repeat_first_field){
@@ -216,7 +217,30 @@ static int header_process_picture_coding_extension (picture_t * picture, uint8_t
                 picture->repeat_count+=50;
         }
     }
-
+    //repeat_count=display_time-100%
+#else
+   // repeat_first implemantation by iive, based on A'rpi/ESP-team and libmpeg3
+    if( picture->progressive_sequence == 1 )
+    {
+        if( picture->repeat_first_field == 0 ) picture->display_time=100;//normal
+       else
+       {
+           if( picture->top_field_first == 0 ) picture->display_time=200;//2 frames
+           else picture->display_time=300;//3 frames
+       }
+    }else
+    {
+         if( picture->progressive_frame == 0 )
+            picture->display_time=100;//2fields, interlaced in time
+        else
+        {
+            if( picture->top_field_first == 0 ) picture->display_time=100;//reconstruct 2 fields
+            else picture->display_time = 150;//reconstruct 3 fields
+        }
+
+        if( picture->picture_structure!=3 ) picture->display_time/=2;//we calc on every field
+    }
+#endif
     return 0;
 }
 
index f5cd473..2f9d665 100644 (file)
@@ -146,7 +146,7 @@ typedef struct picture_s {
     int display_picture_width;
     int display_picture_height;
     int pp_options;
-    int repeat_count;
+    int display_time;
 
     struct vo_frame_s * display_frame;
     int slice;
index 7a198dc..7b459c0 100644 (file)
--- a/mplayer.c
+++ b/mplayer.c
@@ -1327,8 +1327,8 @@ if(1)
     }
 
     // fix mpeg2 frametime:
-    frame_time=(100+picture->repeat_count)*0.01f;
-    picture->repeat_count=0;
+    frame_time=(picture->display_time)*0.01f;
+    picture->display_time=100;
     videobuf_len=0;
 
   } else {