diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2003-06-11 23:08:54 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2003-06-11 23:08:54 +0000 |
commit | 04dd7cc6866e3946cae1c3ad1b3b221ed8a27930 (patch) | |
tree | ecce2340c229a6b310f51c2bad90237be1246d34 /src/libmpeg2 | |
parent | 7ed53e0ca4f460146aeab7ea7db5f6db1a147885 (diff) | |
download | xine-lib-04dd7cc6866e3946cae1c3ad1b3b221ed8a27930.tar.gz xine-lib-04dd7cc6866e3946cae1c3ad1b3b221ed8a27930.tar.bz2 |
- add VO_INTERLACED_FLAG to get_frame
- do not trust progressive_frame for detecting NTSC 3:2, quote:
'the alternating progressive_frame encoding problem. This is a problem where the progressive_frame flag alternates between true and false every frame, when it really should have been set to "true" all the time.'
'There is a lot of content that is affected by this issue, because it's caused by a dumb decision by a very big company that made a very popular MPEG encoder. They've since fixed the encoder, but there are apparently still authoring companies that use it, because the problem is on a lot of high-profile current discs, like Disney's "Monsters Inc." and "Beauty and the Beast".'
http://www.hometheaterhifi.com/volume_8_2/dvd-benchmark-special-report-chroma-bug-4-2001.html
CVS patchset: 5025
CVS date: 2003/06/11 23:08:54
Diffstat (limited to 'src/libmpeg2')
-rw-r--r-- | src/libmpeg2/decode.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c index 0f2c1d0bd..783ae944c 100644 --- a/src/libmpeg2/decode.c +++ b/src/libmpeg2/decode.c @@ -129,8 +129,7 @@ static inline void get_frame_duration (mpeg2dec_t * mpeg2dec, vo_frame_t *frame) if( ((mpeg2dec->rff_pattern & 0xff) == 0xaa || (mpeg2dec->rff_pattern & 0xff) == 0x55) && - !mpeg2dec->picture->progressive_sequence && - mpeg2dec->picture->progressive_frame ) { + !mpeg2dec->picture->progressive_sequence ) { /* special case for ntsc 3:2 pulldown */ frame->duration += frame->duration/4; } @@ -465,7 +464,7 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code, picture->coded_picture_height, picture->aspect_ratio_information, XINE_IMGFMT_YV12, - picture->picture_structure); + VO_INTERLACED_FLAG | picture->picture_structure); else { picture->current_frame = mpeg2dec->stream->video_out->get_frame (mpeg2dec->stream->video_out, @@ -473,7 +472,7 @@ static inline int parse_chunk (mpeg2dec_t * mpeg2dec, int code, picture->coded_picture_height, picture->aspect_ratio_information, XINE_IMGFMT_YV12, - (VO_PREDICTION_FLAG | picture->picture_structure)); + (VO_INTERLACED_FLAG | VO_PREDICTION_FLAG | picture->picture_structure)); if (picture->forward_reference_frame && picture->forward_reference_frame != picture->backward_reference_frame) picture->forward_reference_frame->free (picture->forward_reference_frame); |