From 6092c91ae4dc736a8332e870b812f7b397b9a7c6 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 28 Feb 2019 15:38:47 -0500 Subject: [PATCH] TT#50652 fix possible sequencing bug while resampling Change-Id: I5e0baec70892cbef9a9a036285379fe75ee3eba0 --- daemon/codec.c | 8 ++++++-- include/media_socket.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/daemon/codec.c b/daemon/codec.c index e2f3637e9..7a521f007 100644 --- a/daemon/codec.c +++ b/daemon/codec.c @@ -953,7 +953,7 @@ static void __free_ssrc_handler(void *chp) { static int __packet_encoded(encoder_t *enc, void *u1, void *u2) { struct codec_ssrc_handler *ch = u1; struct media_packet *mp = u2; - unsigned int seq_off = 0; + unsigned int seq_off = mp->iter ? 1 : 0; ilog(LOG_DEBUG, "RTP media successfully encoded: TS %llu, len %i", (unsigned long long) enc->avpkt.pts, enc->avpkt.size); @@ -987,6 +987,7 @@ static int __packet_encoded(encoder_t *enc, void *u1, void *u2) { __output_rtp(mp, ch, ch->handler, buf, inout.len, ch->first_ts + enc->avpkt.pts / enc->def->clockrate_mult, 0, -1, seq_off); + mp->iter++; if (ret == 0) { // no more to go @@ -1003,13 +1004,16 @@ static int __packet_encoded(encoder_t *enc, void *u1, void *u2) { static int __packet_decoded(decoder_t *decoder, AVFrame *frame, void *u1, void *u2) { struct codec_ssrc_handler *ch = u1; + struct media_packet *mp = u2; ilog(LOG_DEBUG, "RTP media successfully decoded: TS %llu, samples %u", (unsigned long long) frame->pts, frame->nb_samples); - encoder_input_fifo(ch->encoder, frame, __packet_encoded, ch, u2); + encoder_input_fifo(ch->encoder, frame, __packet_encoded, ch, mp); av_frame_free(&frame); + mp->iter++; + return 0; } diff --git a/include/media_socket.h b/include/media_socket.h index 6d86e4584..b2c4c3a0c 100644 --- a/include/media_socket.h +++ b/include/media_socket.h @@ -93,6 +93,7 @@ struct media_packet { str payload; GQueue packets_out; + unsigned int iter; // init to 0, inc for each packet processed - used for seq tracking };