mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-04-04 15:21:34 +00:00
parent
4f7189f09e
commit
4f26c99912
@ -166,6 +166,34 @@ static int cmp_pkt_sub_pos_ts(const void *a, const void *b)
|
|||||||
return s1->pos > s2->pos ? 1 : -1;
|
return s1->pos > s2->pos ? 1 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void drop_dups(FFDemuxSubtitlesQueue *q)
|
||||||
|
{
|
||||||
|
int i, drop = 0;
|
||||||
|
|
||||||
|
for (i = 1; i < q->nb_subs; i++) {
|
||||||
|
const int last_id = i - 1 - drop;
|
||||||
|
const AVPacket *last = &q->subs[last_id];
|
||||||
|
|
||||||
|
if (q->subs[i].pts == last->pts &&
|
||||||
|
q->subs[i].duration == last->duration &&
|
||||||
|
!strcmp(q->subs[i].data, last->data)) {
|
||||||
|
|
||||||
|
av_free_packet(&q->subs[i]);
|
||||||
|
drop++;
|
||||||
|
} else if (drop) {
|
||||||
|
q->subs[last_id + 1] = q->subs[i];
|
||||||
|
memset(&q->subs[i], 0, sizeof(q->subs[i])); // for safety
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (drop) {
|
||||||
|
q->nb_subs -= drop;
|
||||||
|
|
||||||
|
// TODO: forward log context down here
|
||||||
|
av_log(NULL, AV_LOG_WARNING, "Dropping %d duplicated subtitle events\n", drop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ff_subtitles_queue_finalize(FFDemuxSubtitlesQueue *q)
|
void ff_subtitles_queue_finalize(FFDemuxSubtitlesQueue *q)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -176,6 +204,7 @@ void ff_subtitles_queue_finalize(FFDemuxSubtitlesQueue *q)
|
|||||||
for (i = 0; i < q->nb_subs; i++)
|
for (i = 0; i < q->nb_subs; i++)
|
||||||
if (q->subs[i].duration == -1 && i < q->nb_subs - 1)
|
if (q->subs[i].duration == -1 && i < q->nb_subs - 1)
|
||||||
q->subs[i].duration = q->subs[i + 1].pts - q->subs[i].pts;
|
q->subs[i].duration = q->subs[i + 1].pts - q->subs[i].pts;
|
||||||
|
drop_dups(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_subtitles_queue_read_packet(FFDemuxSubtitlesQueue *q, AVPacket *pkt)
|
int ff_subtitles_queue_read_packet(FFDemuxSubtitlesQueue *q, AVPacket *pkt)
|
||||||
|
Loading…
Reference in New Issue
Block a user