From 8e7dae173d07533e1de46fad7bb2f834febe27cf Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Sun, 16 Jan 2011 20:51:48 +0200 Subject: subtitles/demux: store duration instead of endpts in demux packets --- libmpdemux/demux_lavf.c | 4 ++-- libmpdemux/demux_mkv.c | 2 +- libmpdemux/demuxer.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index 96f83407b0..03ffa17c43 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -756,11 +756,11 @@ static int demux_lavf_fill_buffer(demuxer_t *demux, demux_stream_t *dsds){ if(ts != AV_NOPTS_VALUE){ dp->pts = ts * av_q2d(priv->avfc->streams[id]->time_base); priv->last_pts= dp->pts * AV_TIME_BASE; - // always set endpts for subtitles, even if PKT_FLAG_KEY is not set, + // always set duration for subtitles, even if 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 & PKT_FLAG_KEY)) && pkt.convergence_duration > 0) - dp->endpts = dp->pts + pkt.convergence_duration * av_q2d(priv->avfc->streams[id]->time_base); + dp->duration = pkt.convergence_duration * av_q2d(priv->avfc->streams[id]->time_base); } dp->pos=demux->filepos; dp->flags= !!(pkt.flags&PKT_FLAG_KEY); diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index 2414b01b4b..b75f07fd67 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -1884,7 +1884,7 @@ static void handle_subtitles(demuxer_t *demuxer, mkv_track_t *track, dp = new_demux_packet(size); memcpy(dp->buffer, block, size); dp->pts = timecode / 1000.0; - dp->endpts = (timecode + block_duration) / 1000.0; + dp->duration = block_duration / 1000.0; ds_add_packet(demuxer->sub, dp); } diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index df0fdaa9bb..ece4b74af8 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -127,7 +127,7 @@ enum timestamp_type { typedef struct demux_packet { int len; double pts; - double endpts; + double duration; double stream_pts; off_t pos; // position in index (AVI) or file (MPG) unsigned char* buffer; @@ -289,7 +289,7 @@ static inline demux_packet_t* new_demux_packet(int len){ dp->len=len; dp->next=NULL; dp->pts=MP_NOPTS_VALUE; - dp->endpts=MP_NOPTS_VALUE; + dp->duration = -1; dp->stream_pts = MP_NOPTS_VALUE; dp->pos=0; dp->flags=0; -- cgit v1.2.3