summaryrefslogtreecommitdiff
path: root/src/libmpeg2
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2003-06-11 23:08:54 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2003-06-11 23:08:54 +0000
commit04dd7cc6866e3946cae1c3ad1b3b221ed8a27930 (patch)
treeecce2340c229a6b310f51c2bad90237be1246d34 /src/libmpeg2
parent7ed53e0ca4f460146aeab7ea7db5f6db1a147885 (diff)
downloadxine-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.c7
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);