mirror of
https://github.com/librempeg/librempeg
synced 2024-11-23 11:39:47 +00:00
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.
This commit is contained in:
parent
ff3624b1ad
commit
ad5d72b123
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user