summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpeg2/header.c26
-rw-r--r--libmpeg2/mpeg2_internal.h2
-rw-r--r--mplayer.c4
3 files changed, 28 insertions, 4 deletions
diff --git a/libmpeg2/header.c b/libmpeg2/header.c
index ab5e12923c..331fcf1767 100644
--- a/libmpeg2/header.c
+++ b/libmpeg2/header.c
@@ -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;
}
diff --git a/libmpeg2/mpeg2_internal.h b/libmpeg2/mpeg2_internal.h
index f5cd473f2b..2f9d66593a 100644
--- a/libmpeg2/mpeg2_internal.h
+++ b/libmpeg2/mpeg2_internal.h
@@ -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;
diff --git a/mplayer.c b/mplayer.c
index 7a198dcabd..7b459c01eb 100644
--- 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 {