From: Gildas Bazin Date: Thu, 23 Sep 2010 21:22:39 +0000 (+0100) Subject: Fix playback of RealVideo with B frames (pts were not calculated properly) X-Git-Tag: 1.2.0-pre1~5236 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=f3ad50e8a846bd4de3c36a31bae26c1042b52c7c;p=vlc Fix playback of RealVideo with B frames (pts were not calculated properly) --- diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c index 9313dcab3e..4e3904b8e4 100644 --- a/modules/codec/avcodec/video.c +++ b/modules/codec/avcodec/video.c @@ -619,6 +619,12 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block ) continue; } + /* Sanity check (seems to be needed for some streams) */ + if( p_sys->p_ff_pic->pict_type == FF_B_TYPE ) + { + p_sys->b_has_b_frames = true; + } + /* Compute the PTS */ mtime_t i_pts = VLC_TS_INVALID; if( p_sys->p_ff_pic->reordered_opaque != INT64_MIN ) @@ -632,6 +638,15 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block ) !p_sys->p_ff_pic->reference || p_sys->i_pts <= VLC_TS_INVALID ) i_pts = i_ts; + + /* Guess what ? The rules are different for Real Video :( */ + if( (p_dec->fmt_in.i_codec == VLC_CODEC_RV30 || + p_dec->fmt_in.i_codec == VLC_CODEC_RV40) && + p_sys->b_has_b_frames ) + { + i_pts = VLC_TS_INVALID; + if(p_sys->p_ff_pic->reference) i_pts = i_ts; + } } else { @@ -707,12 +722,6 @@ picture_t *DecodeVideo( decoder_t *p_dec, block_t **pp_block ) decoder_LinkPicture( p_dec, p_pic ); } - /* Sanity check (seems to be needed for some streams) */ - if( p_sys->p_ff_pic->pict_type == FF_B_TYPE ) - { - p_sys->b_has_b_frames = true; - } - if( !p_dec->fmt_in.video.i_sar_num || !p_dec->fmt_in.video.i_sar_den ) { /* Fetch again the aspect ratio in case it changed */