mux: fix chunked interleaver
The code did not account properly for packets that where added to the end of the packet list. Also flags for such packets where not set correctly leading to incorrect chunked interleaving. Reported-by: bcoudurier Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
b7bc49a957
commit
1191db31c1
@ -549,20 +549,21 @@ int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt,
|
||||
next_point = &s->packet_buffer;
|
||||
}
|
||||
|
||||
if (*next_point) {
|
||||
if (chunked) {
|
||||
uint64_t max= av_rescale_q_rnd(s->max_chunk_duration, AV_TIME_BASE_Q, st->time_base, AV_ROUND_UP);
|
||||
if ( st->interleaver_chunk_size + pkt->size <= s->max_chunk_size-1U
|
||||
&& st->interleaver_chunk_duration + pkt->duration <= max-1U) {
|
||||
st->interleaver_chunk_size += pkt->size;
|
||||
st->interleaver_chunk_duration += pkt->duration;
|
||||
goto next_non_null;
|
||||
} else {
|
||||
st->interleaver_chunk_size =
|
||||
st->interleaver_chunk_duration = 0;
|
||||
this_pktl->pkt.flags |= CHUNK_START;
|
||||
}
|
||||
if (chunked) {
|
||||
uint64_t max= av_rescale_q_rnd(s->max_chunk_duration, AV_TIME_BASE_Q, st->time_base, AV_ROUND_UP);
|
||||
if ( st->interleaver_chunk_size + pkt->size <= s->max_chunk_size-1U
|
||||
&& st->interleaver_chunk_duration + pkt->duration <= max-1U) {
|
||||
st->interleaver_chunk_size += pkt->size;
|
||||
st->interleaver_chunk_duration += pkt->duration;
|
||||
} else {
|
||||
st->interleaver_chunk_size =
|
||||
st->interleaver_chunk_duration = 0;
|
||||
this_pktl->pkt.flags |= CHUNK_START;
|
||||
}
|
||||
}
|
||||
if (*next_point) {
|
||||
if (chunked && !(this_pktl->pkt.flags & CHUNK_START))
|
||||
goto next_non_null;
|
||||
|
||||
if (compare(s, &s->packet_buffer_end->pkt, pkt)) {
|
||||
while ( *next_point
|
||||
|
Loading…
x
Reference in New Issue
Block a user