[FFmpeg-cvslog] lavf/subtitles: seek a little more backward when necessary.
Clément Bœsch
git at videolan.org
Sun Dec 2 00:19:22 CET 2012
ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Fri Nov 30 07:00:59 2012 +0100| [ad5d72b1235a58442c231c3e9b8d78fc4e7b422e] | committer: Clément Bœsch
lavf/subtitles: seek a little more backward when necessary.
If some previous subtitles are overlapping with the current time
we make sure they are raised so the renderer can display them too.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ad5d72b1235a58442c231c3e9b8d78fc4e7b422e
---
libavformat/subtitles.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/libavformat/subtitles.c b/libavformat/subtitles.c
index 290eaa0..b264ec5 100644
--- a/libavformat/subtitles.c
+++ b/libavformat/subtitles.c
@@ -103,6 +103,7 @@ int ff_subtitles_queue_seek(FFDemuxSubtitlesQueue *q, AVFormatContext *s, int st
} else {
int i, idx = -1;
int64_t min_ts_diff = INT64_MAX;
+ int64_t ts_selected;
if (stream_index == -1) {
AVRational time_base = s->streams[0]->time_base;
ts = av_rescale_q(ts, AV_TIME_BASE_Q, time_base);
@@ -124,6 +125,16 @@ int ff_subtitles_queue_seek(FFDemuxSubtitlesQueue *q, AVFormatContext *s, int st
}
if (idx < 0)
return AVERROR(ERANGE);
+ /* look back in the latest subtitles for overlapping subtitles */
+ ts_selected = q->subs[idx].pts;
+ for (i = idx - 1; i >= 0; i--) {
+ if (q->subs[i].duration <= 0)
+ continue;
+ if (q->subs[i].pts > ts_selected - q->subs[i].duration)
+ idx = i;
+ else
+ break;
+ }
q->current_sub_idx = idx;
}
return 0;
More information about the ffmpeg-cvslog
mailing list