diff options
-rw-r--r-- | src/libmpeg2/decode.c | 4 | ||||
-rw-r--r-- | src/libmpeg2/header.c | 4 | ||||
-rw-r--r-- | src/libmpeg2/mpeg2_internal.h | 3 |
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 { |