Mercurial > mplayer.hg
changeset 34963:0ba5ba56f6d0
demux_lavf: Set endpts from AVPacket.duration
Always set endpts from AVPacket.duration for all streams. Override
endpts with AVPacket.convergence_duration for subtitle streams if it
is non-zero, because some lavf demuxers store the duration there.
However keep the behaviour to never set endpts if it would equal pts
afterwards.
Also stop checking AV_PKT_FLAG_KEY when overriding endpts with
convergence_duration. It does not seem necessary anymore.
author | al |
---|---|
date | Thu, 02 Aug 2012 23:28:04 +0000 |
parents | 8446e92c7bc2 |
children | 667130006055 |
files | libmpdemux/demux_lavf.c |
diffstat | 1 files changed, 4 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/libmpdemux/demux_lavf.c Sun Jul 29 19:50:30 2012 +0000 +++ b/libmpdemux/demux_lavf.c Thu Aug 02 23:28:04 2012 +0000 @@ -651,10 +651,10 @@ if(pkt.pts != AV_NOPTS_VALUE){ dp->pts=pkt.pts * av_q2d(priv->avfc->streams[id]->time_base); priv->last_pts= dp->pts * AV_TIME_BASE; - // always set endpts for subtitles, even if AV_PKT_FLAG_KEY is not set, - // otherwise they will stay on screen to long if e.g. ASS is demuxed from mkv - if((ds == demux->sub || (pkt.flags & AV_PKT_FLAG_KEY)) && - pkt.convergence_duration > 0) + if(pkt.duration > 0) + dp->endpts = dp->pts + pkt.duration * av_q2d(priv->avfc->streams[id]->time_base); + /* subtitle durations are sometimes stored in convergence_duration */ + if(ds == demux->sub && pkt.convergence_duration > 0) dp->endpts = dp->pts + pkt.convergence_duration * av_q2d(priv->avfc->streams[id]->time_base); } dp->pos=demux->filepos;