int ff_audio_rechunk_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush,

                        int (*get_packet)(AVFormatContext *, AVPacket *, AVPacket *, int),

                        int (*compare_ts)(AVFormatContext *, AVPacket *, AVPacket *))

{

    int i;



    if (pkt) {

        AVStream *st = s->streams[pkt->stream_index];

        AudioInterleaveContext *aic = st->priv_data;

        if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {

            unsigned new_size = av_fifo_size(aic->fifo) + pkt->size;

            if (new_size > aic->fifo_size) {

                if (av_fifo_realloc2(aic->fifo, new_size) < 0)

                    return -1;

                aic->fifo_size = new_size;

            }

            av_fifo_generic_write(aic->fifo, pkt->data, pkt->size, NULL);

        } else {

            // rewrite pts and dts to be decoded time line position

            pkt->pts = pkt->dts = aic->dts;

            aic->dts += pkt->duration;

            ff_interleave_add_packet(s, pkt, compare_ts);

        }

        pkt = NULL;

    }



    for (i = 0; i < s->nb_streams; i++) {

        AVStream *st = s->streams[i];

        if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {

            AVPacket new_pkt;

            while (interleave_new_audio_packet(s, &new_pkt, i, flush))

                ff_interleave_add_packet(s, &new_pkt, compare_ts);

        }

    }



    return get_packet(s, out, NULL, flush);

}

int ff_audio_rechunk_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush,

                        int (*get_packet)(AVFormatContext *, AVPacket *, AVPacket *, int),

                        int (*compare_ts)(AVFormatContext *, AVPacket *, AVPacket *))

{

    int i;



    if (pkt) {

        AVStream *st = s->streams[pkt->stream_index];

        AudioInterleaveContext *aic = st->priv_data;

        if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {

            unsigned new_size = av_fifo_size(aic->fifo) + pkt->size;

            if (new_size > aic->fifo_size) {

                if (av_fifo_realloc2(aic->fifo, new_size) < 0)

                    return -1;

                aic->fifo_size = new_size;

            }

            av_fifo_generic_write(aic->fifo, pkt->data, pkt->size, NULL);

        } else {

            

            pkt->pts = pkt->dts = aic->dts;

            aic->dts += pkt->duration;

            ff_interleave_add_packet(s, pkt, compare_ts);

        }

        pkt = NULL;

    }



    for (i = 0; i < s->nb_streams; i++) {

        AVStream *st = s->streams[i];

        if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {

            AVPacket new_pkt;

            while (interleave_new_audio_packet(s, &new_pkt, i, flush))

                ff_interleave_add_packet(s, &new_pkt, compare_ts);

        }

    }



    return get_packet(s, out, NULL, flush);

}

VAR_7intVAR_7 VAR_7ff_audio_rechunk_interleaveVAR_7(VAR_7AVFormatContextVAR_7 *VAR_7VAR_0VAR_7, VAR_7AVPacketVAR_7 *VAR_7VAR_1VAR_7, VAR_7AVPacketVAR_7 *VAR_7VAR_2VAR_7, VAR_7intVAR_7 VAR_7VAR_3VAR_7,

                        VAR_7intVAR_7 (*VAR_7VAR_4VAR_7)(VAR_7AVFormatContextVAR_7 *, VAR_7AVPacketVAR_7 *, VAR_7AVPacketVAR_7 *, VAR_7intVAR_7),

                        VAR_7intVAR_7 (*VAR_7compare_tsVAR_7)(VAR_7AVFormatContextVAR_7 *, VAR_7AVPacketVAR_7 *, VAR_7AVPacketVAR_7 *))

{

    VAR_7intVAR_7 VAR_7iVAR_7;



    VAR_7ifVAR_7 (VAR_7VAR_2VAR_7) {

        VAR_7AVStreamVAR_7 *VAR_7stVAR_7 = VAR_7VAR_0VAR_7->VAR_7streamsVAR_7[VAR_7VAR_2VAR_7->VAR_7stream_indexVAR_7];

        VAR_7AudioInterleaveContextVAR_7 *VAR_7aicVAR_7 = VAR_7stVAR_7->VAR_7priv_dataVAR_7;

        VAR_7ifVAR_7 (VAR_7stVAR_7->VAR_7codecVAR_7->VAR_7codec_typeVAR_7 == VAR_7AVMEDIA_TYPE_AUDIOVAR_7) {

            VAR_7unsignedVAR_7 VAR_7new_sizeVAR_7 = VAR_7av_fifo_sizeVAR_7(VAR_7aicVAR_7->VAR_7fifoVAR_7) + VAR_7VAR_2VAR_7->VAR_7sizeVAR_7;

            VAR_7ifVAR_7 (VAR_7new_sizeVAR_7 > VAR_7aicVAR_7->VAR_7fifo_sizeVAR_7) {

                VAR_7ifVAR_7 (VAR_7av_fifo_realloc2VAR_7(VAR_7aicVAR_7->VAR_7fifoVAR_7, VAR_7new_sizeVAR_7) < VAR_70VAR_7)

                    VAR_7returnVAR_7 -VAR_71VAR_7;

                VAR_7aicVAR_7->VAR_7fifo_sizeVAR_7 = VAR_7new_sizeVAR_7;

            }

            VAR_7av_fifo_generic_writeVAR_7(VAR_7aicVAR_7->VAR_7fifoVAR_7, VAR_7VAR_2VAR_7->VAR_7dataVAR_7, VAR_7VAR_2VAR_7->VAR_7sizeVAR_7, VAR_7NULLVAR_7);

        } VAR_7elseVAR_7 {

            

            VAR_7VAR_2VAR_7->VAR_7ptsVAR_7 = VAR_7VAR_2VAR_7->VAR_7dtsVAR_7 = VAR_7aicVAR_7->VAR_7dtsVAR_7;

            VAR_7aicVAR_7->VAR_7dtsVAR_7 += VAR_7VAR_2VAR_7->VAR_7durationVAR_7;

            VAR_7ff_interleave_add_packetVAR_7(VAR_7VAR_0VAR_7, VAR_7VAR_2VAR_7, VAR_7compare_tsVAR_7);

        }

        VAR_7VAR_2VAR_7 = VAR_7NULLVAR_7;

    }



    VAR_7forVAR_7 (VAR_7iVAR_7 = VAR_70VAR_7; VAR_7iVAR_7 < VAR_7VAR_0VAR_7->VAR_7nb_streamsVAR_7; VAR_7iVAR_7++) {

        VAR_7AVStreamVAR_7 *VAR_7stVAR_7 = VAR_7VAR_0VAR_7->VAR_7streamsVAR_7[VAR_7iVAR_7];

        VAR_7ifVAR_7 (VAR_7stVAR_7->VAR_7codecVAR_7->VAR_7codec_typeVAR_7 == VAR_7AVMEDIA_TYPE_AUDIOVAR_7) {

            VAR_7AVPacketVAR_7 VAR_7new_pktVAR_7;

            VAR_7whileVAR_7 (VAR_7interleave_new_audio_packetVAR_7(VAR_7VAR_0VAR_7, &VAR_7new_pktVAR_7, VAR_7iVAR_7, VAR_7VAR_3VAR_7))

                VAR_7ff_interleave_add_packetVAR_7(VAR_7VAR_0VAR_7, &VAR_7new_pktVAR_7, VAR_7compare_tsVAR_7);

        }

    }



    VAR_7returnVAR_7 VAR_7VAR_4VAR_7(VAR_7VAR_0VAR_7, VAR_7VAR_1VAR_7, VAR_7NULLVAR_7, VAR_7VAR_3VAR_7);

}

VAR_7intVAR_7 VAR_7ff_audio_rechunk_interleaveVAR_7(VAR_7AVFormatContextVAR_7 *VAR_7VAR_0VAR_7, VAR_7AVPacketVAR_7 *VAR_7VAR_1VAR_7, VAR_7AVPacketVAR_7 *VAR_7VAR_2VAR_7, VAR_7intVAR_7 VAR_7VAR_3VAR_7,
VAR_7intVAR_7 (*VAR_7VAR_4VAR_7)(VAR_7AVFormatContextVAR_7 *, VAR_7AVPacketVAR_7 *, VAR_7AVPacketVAR_7 *, VAR_7intVAR_7),
VAR_7intVAR_7 (*VAR_7compare_tsVAR_7)(VAR_7AVFormatContextVAR_7 *, VAR_7AVPacketVAR_7 *, VAR_7AVPacketVAR_7 *))
{ VAR_7intVAR_7 VAR_7iVAR_7; VAR_7ifVAR_7 (VAR_7VAR_2VAR_7) { VAR_7AVStreamVAR_7 *VAR_7stVAR_7 = VAR_7VAR_0VAR_7->VAR_7streamsVAR_7[VAR_7VAR_2VAR_7->VAR_7stream_indexVAR_7]; VAR_7AudioInterleaveContextVAR_7 *VAR_7aicVAR_7 = VAR_7stVAR_7->VAR_7priv_dataVAR_7; VAR_7ifVAR_7 (VAR_7stVAR_7->VAR_7codecVAR_7->VAR_7codec_typeVAR_7 == VAR_7AVMEDIA_TYPE_AUDIOVAR_7) { VAR_7unsignedVAR_7 VAR_7new_sizeVAR_7 = VAR_7av_fifo_sizeVAR_7(VAR_7aicVAR_7->VAR_7fifoVAR_7) + VAR_7VAR_2VAR_7->VAR_7sizeVAR_7; VAR_7ifVAR_7 (VAR_7new_sizeVAR_7 > VAR_7aicVAR_7->VAR_7fifo_sizeVAR_7) { VAR_7ifVAR_7 (VAR_7av_fifo_realloc2VAR_7(VAR_7aicVAR_7->VAR_7fifoVAR_7, VAR_7new_sizeVAR_7) < VAR_70VAR_7)
VAR_7returnVAR_7 -VAR_71VAR_7; VAR_7aicVAR_7->VAR_7fifo_sizeVAR_7 = VAR_7new_sizeVAR_7; } VAR_7av_fifo_generic_writeVAR_7(VAR_7aicVAR_7->VAR_7fifoVAR_7, VAR_7VAR_2VAR_7->VAR_7dataVAR_7, VAR_7VAR_2VAR_7->VAR_7sizeVAR_7, VAR_7NULLVAR_7); } VAR_7elseVAR_7 { VAR_7VAR_2VAR_7->VAR_7ptsVAR_7 = VAR_7VAR_2VAR_7->VAR_7dtsVAR_7 = VAR_7aicVAR_7->VAR_7dtsVAR_7; VAR_7aicVAR_7->VAR_7dtsVAR_7 += VAR_7VAR_2VAR_7->VAR_7durationVAR_7; VAR_7ff_interleave_add_packetVAR_7(VAR_7VAR_0VAR_7, VAR_7VAR_2VAR_7, VAR_7compare_tsVAR_7); } VAR_7VAR_2VAR_7 = VAR_7NULLVAR_7; } VAR_7forVAR_7 (VAR_7iVAR_7 = VAR_70VAR_7; VAR_7iVAR_7 < VAR_7VAR_0VAR_7->VAR_7nb_streamsVAR_7; VAR_7iVAR_7++) { VAR_7AVStreamVAR_7 *VAR_7stVAR_7 = VAR_7VAR_0VAR_7->VAR_7streamsVAR_7[VAR_7iVAR_7]; VAR_7ifVAR_7 (VAR_7stVAR_7->VAR_7codecVAR_7->VAR_7codec_typeVAR_7 == VAR_7AVMEDIA_TYPE_AUDIOVAR_7) { VAR_7AVPacketVAR_7 VAR_7new_pktVAR_7; VAR_7whileVAR_7 (VAR_7interleave_new_audio_packetVAR_7(VAR_7VAR_0VAR_7, &VAR_7new_pktVAR_7, VAR_7iVAR_7, VAR_7VAR_3VAR_7))
VAR_7ff_interleave_add_packetVAR_7(VAR_7VAR_0VAR_7, &VAR_7new_pktVAR_7, VAR_7compare_tsVAR_7); } } VAR_7returnVAR_7 VAR_7VAR_4VAR_7(VAR_7VAR_0VAR_7, VAR_7VAR_1VAR_7, VAR_7NULLVAR_7, VAR_7VAR_3VAR_7); }