summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libmpeg2/decode.c4
-rw-r--r--src/libmpeg2/header.c4
-rw-r--r--src/libmpeg2/mpeg2_internal.h3
3 files changed, 11 insertions, 0 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c
index 6b3dc79d8..223971157 100644
--- a/src/libmpeg2/decode.c
+++ b/src/libmpeg2/decode.c
@@ -120,6 +120,10 @@ static inline void get_frame_duration (mpeg2dec_t * mpeg2dec, vo_frame_t *frame)
frame->duration = 0;
}
+ frame->duration = frame->duration *
+ ((mpeg2dec->picture->frame_rate_ext_n + 1) /
+ (mpeg2dec->picture->frame_rate_ext_d + 1));
+
/* this should be used to detect any special rff pattern */
mpeg2dec->rff_pattern = mpeg2dec->rff_pattern << 1;
mpeg2dec->rff_pattern |= !!frame->repeat_first_field;
diff --git a/src/libmpeg2/header.c b/src/libmpeg2/header.c
index 44e7695f0..c68ee5165 100644
--- a/src/libmpeg2/header.c
+++ b/src/libmpeg2/header.c
@@ -177,6 +177,7 @@ static int sequence_extension (picture_t * picture, uint8_t * buffer)
picture->coded_picture_height =
(picture->coded_picture_height + 31) & ~31;
+
/* printf ("libmpeg2: low_delay : %d\n", picture->low_delay); */
/*
@@ -184,6 +185,9 @@ static int sequence_extension (picture_t * picture, uint8_t * buffer)
buffer[5], buffer[5] % 0x80);
*/
+ picture->frame_rate_ext_n = buffer[5] & 0x31;
+ picture->frame_rate_ext_d = (buffer[5] >> 2) & 0x03;
+
/* MPEG1 - for testing only */
picture->mpeg1 = 0;
diff --git a/src/libmpeg2/mpeg2_internal.h b/src/libmpeg2/mpeg2_internal.h
index 7449e2dd0..5beea9844 100644
--- a/src/libmpeg2/mpeg2_internal.h
+++ b/src/libmpeg2/mpeg2_internal.h
@@ -167,6 +167,9 @@ typedef struct picture_s {
uint32_t broken_link;
int bitrate;
+ int frame_rate_ext_n;
+ int frame_rate_ext_d;
+
} picture_t;
typedef struct cpu_state_s {