mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
avformat/mux: ignore delayed vp8/9 packets in max_interleave_delta calculation
libvpx adds very significant delay, which appears normal and we must buffer all other streams no matter what to interleave them correctly Fixes Ticket3440 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
24327706e1
commit
a06fac353c
@ -778,7 +778,9 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
|
|||||||
for (i = 0; i < s->nb_streams; i++) {
|
for (i = 0; i < s->nb_streams; i++) {
|
||||||
if (s->streams[i]->last_in_packet_buffer) {
|
if (s->streams[i]->last_in_packet_buffer) {
|
||||||
++stream_count;
|
++stream_count;
|
||||||
} else if (s->streams[i]->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
|
} else if (s->streams[i]->codec->codec_type != AVMEDIA_TYPE_ATTACHMENT &&
|
||||||
|
s->streams[i]->codec->codec_id != AV_CODEC_ID_VP8 &&
|
||||||
|
s->streams[i]->codec->codec_id != AV_CODEC_ID_VP9) {
|
||||||
++noninterleaved_count;
|
++noninterleaved_count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -786,7 +788,11 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
|
|||||||
if (s->internal->nb_interleaved_streams == stream_count)
|
if (s->internal->nb_interleaved_streams == stream_count)
|
||||||
flush = 1;
|
flush = 1;
|
||||||
|
|
||||||
if (s->max_interleave_delta > 0 && s->packet_buffer && !flush) {
|
if (s->max_interleave_delta > 0 &&
|
||||||
|
s->packet_buffer &&
|
||||||
|
!flush &&
|
||||||
|
s->internal->nb_interleaved_streams == stream_count+noninterleaved_count
|
||||||
|
) {
|
||||||
AVPacket *top_pkt = &s->packet_buffer->pkt;
|
AVPacket *top_pkt = &s->packet_buffer->pkt;
|
||||||
int64_t delta_dts = INT64_MIN;
|
int64_t delta_dts = INT64_MIN;
|
||||||
int64_t top_dts = av_rescale_q(top_pkt->dts,
|
int64_t top_dts = av_rescale_q(top_pkt->dts,
|
||||||
|
Loading…
Reference in New Issue
Block a user