int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt,

                             int (*compare)(AVFormatContext *, AVPacket *, AVPacket *))

{

    int ret;

    AVPacketList **next_point, *this_pktl;

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

    int chunked    = s->max_chunk_size || s->max_chunk_duration;



    this_pktl      = av_mallocz(sizeof(AVPacketList));

    if (!this_pktl)

        return AVERROR(ENOMEM);

    if ((pkt->flags & AV_PKT_FLAG_UNCODED_FRAME)) {

        av_assert0(pkt->size == UNCODED_FRAME_PACKET_SIZE);

        av_assert0(((AVFrame *)pkt->data)->buf);

    }



    if ((ret = av_packet_ref(&this_pktl->pkt, pkt)) < 0) {

        av_free(this_pktl);

        return ret;

    }



    if (s->streams[pkt->stream_index]->last_in_packet_buffer) {

        next_point = &(st->last_in_packet_buffer->next);

    } else {

        next_point = &s->internal->packet_buffer;

    }



    if (chunked) {

        uint64_t max= av_rescale_q_rnd(s->max_chunk_duration, AV_TIME_BASE_Q, st->time_base, AV_ROUND_UP);

        st->interleaver_chunk_size     += pkt->size;

        st->interleaver_chunk_duration += pkt->duration;

        if (   (s->max_chunk_size && st->interleaver_chunk_size > s->max_chunk_size)

            || (max && st->interleaver_chunk_duration           > max)) {

            st->interleaver_chunk_size      = 0;

            this_pktl->pkt.flags |= CHUNK_START;

            if (max && st->interleaver_chunk_duration > max) {

                int64_t syncoffset = (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)*max/2;

                int64_t syncto = av_rescale(pkt->dts + syncoffset, 1, max)*max - syncoffset;



                st->interleaver_chunk_duration += (pkt->dts - syncto)/8 - max;

            } else

                st->interleaver_chunk_duration = 0;

        }

    }

    if (*next_point) {

        if (chunked && !(this_pktl->pkt.flags & CHUNK_START))

            goto next_non_null;



        if (compare(s, &s->internal->packet_buffer_end->pkt, pkt)) {

            while (   *next_point

                   && ((chunked && !((*next_point)->pkt.flags&CHUNK_START))

                       || !compare(s, &(*next_point)->pkt, pkt)))

                next_point = &(*next_point)->next;

            if (*next_point)

                goto next_non_null;

        } else {

            next_point = &(s->internal->packet_buffer_end->next);

        }

    }

    av_assert1(!*next_point);



    s->internal->packet_buffer_end = this_pktl;

next_non_null:



    this_pktl->next = *next_point;



    s->streams[pkt->stream_index]->last_in_packet_buffer =

        *next_point                                      = this_pktl;



    av_packet_unref(pkt);



    return 0;

}

int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt,

                             int (*compare)(AVFormatContext *, AVPacket *, AVPacket *))

{

    int ret;

    AVPacketList **next_point, *this_pktl;

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

    int chunked    = s->max_chunk_size || s->max_chunk_duration;



    this_pktl      = av_mallocz(sizeof(AVPacketList));

    if (!this_pktl)

        return AVERROR(ENOMEM);

    if ((pkt->flags & AV_PKT_FLAG_UNCODED_FRAME)) {

        av_assert0(pkt->size == UNCODED_FRAME_PACKET_SIZE);

        av_assert0(((AVFrame *)pkt->data)->buf);

    }



    if ((ret = av_packet_ref(&this_pktl->pkt, pkt)) < 0) {

        av_free(this_pktl);

        return ret;

    }



    if (s->streams[pkt->stream_index]->last_in_packet_buffer) {

        next_point = &(st->last_in_packet_buffer->next);

    } else {

        next_point = &s->internal->packet_buffer;

    }



    if (chunked) {

        uint64_t max= av_rescale_q_rnd(s->max_chunk_duration, AV_TIME_BASE_Q, st->time_base, AV_ROUND_UP);

        st->interleaver_chunk_size     += pkt->size;

        st->interleaver_chunk_duration += pkt->duration;

        if (   (s->max_chunk_size && st->interleaver_chunk_size > s->max_chunk_size)

            || (max && st->interleaver_chunk_duration           > max)) {

            st->interleaver_chunk_size      = 0;

            this_pktl->pkt.flags |= CHUNK_START;

            if (max && st->interleaver_chunk_duration > max) {

                int64_t syncoffset = (st->codec->codec_type == AVMEDIA_TYPE_VIDEO)*max/2;

                int64_t syncto = av_rescale(pkt->dts + syncoffset, 1, max)*max - syncoffset;



                st->interleaver_chunk_duration += (pkt->dts - syncto)/8 - max;

            } else

                st->interleaver_chunk_duration = 0;

        }

    }

    if (*next_point) {

        if (chunked && !(this_pktl->pkt.flags & CHUNK_START))

            goto next_non_null;



        if (compare(s, &s->internal->packet_buffer_end->pkt, pkt)) {

            while (   *next_point

                   && ((chunked && !((*next_point)->pkt.flags&CHUNK_START))

                       || !compare(s, &(*next_point)->pkt, pkt)))

                next_point = &(*next_point)->next;

            if (*next_point)

                goto next_non_null;

        } else {

            next_point = &(s->internal->packet_buffer_end->next);

        }

    }

    av_assert1(!*next_point);



    s->internal->packet_buffer_end = this_pktl;

next_non_null:



    this_pktl->next = *next_point;



    s->streams[pkt->stream_index]->last_in_packet_buffer =

        *next_point                                      = this_pktl;



    av_packet_unref(pkt);



    return 0;

}

    if ((ret = av_packet_ref(&this_pktl->pkt, pkt)) < 0) {         av_free(this_pktl);         return ret;
VAR_4intVAR_4 VAR_4ff_interleave_add_packetVAR_4(VAR_4AVFormatContextVAR_4 *VAR_4VAR_0VAR_4, VAR_4AVPacketVAR_4 *VAR_4VAR_1VAR_4,

                             VAR_4intVAR_4 (*VAR_4VAR_2VAR_4)(VAR_4AVFormatContextVAR_4 *, VAR_4AVPacketVAR_4 *, VAR_4AVPacketVAR_4 *))

{

    VAR_4intVAR_4 VAR_4retVAR_4;

    VAR_4AVPacketListVAR_4 **VAR_4next_pointVAR_4, *VAR_4this_pktlVAR_4;

    VAR_4AVStreamVAR_4 *VAR_4stVAR_4   = VAR_4VAR_0VAR_4->VAR_4streamsVAR_4[VAR_4VAR_1VAR_4->VAR_4stream_indexVAR_4];

    VAR_4intVAR_4 VAR_4chunkedVAR_4    = VAR_4VAR_0VAR_4->VAR_4max_chunk_sizeVAR_4 || VAR_4VAR_0VAR_4->VAR_4max_chunk_durationVAR_4;



    VAR_4this_pktlVAR_4      = VAR_4av_malloczVAR_4(VAR_4sizeofVAR_4(VAR_4AVPacketListVAR_4));

    VAR_4ifVAR_4 (!VAR_4this_pktlVAR_4)

        VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4ENOMEMVAR_4);

    VAR_4ifVAR_4 ((VAR_4VAR_1VAR_4->VAR_4flagsVAR_4 & VAR_4AV_PKT_FLAG_UNCODED_FRAMEVAR_4)) {

        VAR_4av_assert0VAR_4(VAR_4VAR_1VAR_4->VAR_4sizeVAR_4 == VAR_4UNCODED_FRAME_PACKET_SIZEVAR_4);

        VAR_4av_assert0VAR_4(((VAR_4AVFrameVAR_4 *)VAR_4VAR_1VAR_4->VAR_4dataVAR_4)->VAR_4bufVAR_4);

    }



    VAR_4ifVAR_4 ((VAR_4retVAR_4 = VAR_4av_packet_refVAR_4(&VAR_4this_pktlVAR_4->VAR_4VAR_1VAR_4, VAR_4VAR_1VAR_4)) < VAR_40VAR_4) {

        VAR_4av_freeVAR_4(VAR_4this_pktlVAR_4);

        VAR_4returnVAR_4 VAR_4retVAR_4;

    }



    VAR_4ifVAR_4 (VAR_4VAR_0VAR_4->VAR_4streamsVAR_4[VAR_4VAR_1VAR_4->VAR_4stream_indexVAR_4]->VAR_4last_in_packet_bufferVAR_4) {

        VAR_4next_pointVAR_4 = &(VAR_4stVAR_4->VAR_4last_in_packet_bufferVAR_4->VAR_4nextVAR_4);

    } VAR_4elseVAR_4 {

        VAR_4next_pointVAR_4 = &VAR_4VAR_0VAR_4->VAR_4internalVAR_4->VAR_4packet_bufferVAR_4;

    }



    VAR_4ifVAR_4 (VAR_4chunkedVAR_4) {

        VAR_4uint64_tVAR_4 VAR_4maxVAR_4= VAR_4av_rescale_q_rndVAR_4(VAR_4VAR_0VAR_4->VAR_4max_chunk_durationVAR_4, VAR_4AV_TIME_BASE_QVAR_4, VAR_4stVAR_4->VAR_4time_baseVAR_4, VAR_4AV_ROUND_UPVAR_4);

        VAR_4stVAR_4->VAR_4interleaver_chunk_sizeVAR_4     += VAR_4VAR_1VAR_4->VAR_4sizeVAR_4;

        VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4 += VAR_4VAR_1VAR_4->VAR_4durationVAR_4;

        VAR_4ifVAR_4 (   (VAR_4VAR_0VAR_4->VAR_4max_chunk_sizeVAR_4 && VAR_4stVAR_4->VAR_4interleaver_chunk_sizeVAR_4 > VAR_4VAR_0VAR_4->VAR_4max_chunk_sizeVAR_4)

            || (VAR_4maxVAR_4 && VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4           > VAR_4maxVAR_4)) {

            VAR_4stVAR_4->VAR_4interleaver_chunk_sizeVAR_4      = VAR_40VAR_4;

            VAR_4this_pktlVAR_4->VAR_4VAR_1VAR_4.VAR_4flagsVAR_4 |= VAR_4CHUNK_STARTVAR_4;

            VAR_4ifVAR_4 (VAR_4maxVAR_4 && VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4 > VAR_4maxVAR_4) {

                VAR_4int64_tVAR_4 VAR_4syncoffsetVAR_4 = (VAR_4stVAR_4->VAR_4codecVAR_4->VAR_4codec_typeVAR_4 == VAR_4AVMEDIA_TYPE_VIDEOVAR_4)*VAR_4maxVAR_4/VAR_42VAR_4;

                VAR_4int64_tVAR_4 VAR_4synctoVAR_4 = VAR_4av_rescaleVAR_4(VAR_4VAR_1VAR_4->VAR_4dtsVAR_4 + VAR_4syncoffsetVAR_4, VAR_41VAR_4, VAR_4maxVAR_4)*VAR_4maxVAR_4 - VAR_4syncoffsetVAR_4;



                VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4 += (VAR_4VAR_1VAR_4->VAR_4dtsVAR_4 - VAR_4synctoVAR_4)/VAR_48VAR_4 - VAR_4maxVAR_4;

            } VAR_4elseVAR_4

                VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4 = VAR_40VAR_4;

        }

    }

    VAR_4ifVAR_4 (*VAR_4next_pointVAR_4) {

        VAR_4ifVAR_4 (VAR_4chunkedVAR_4 && !(VAR_4this_pktlVAR_4->VAR_4VAR_1VAR_4.VAR_4flagsVAR_4 & VAR_4CHUNK_STARTVAR_4))

            VAR_4gotoVAR_4 VAR_4next_non_nullVAR_4;



        VAR_4ifVAR_4 (VAR_4VAR_2VAR_4(VAR_4VAR_0VAR_4, &VAR_4VAR_0VAR_4->VAR_4internalVAR_4->VAR_4packet_buffer_endVAR_4->VAR_4VAR_1VAR_4, VAR_4VAR_1VAR_4)) {

            VAR_4whileVAR_4 (   *VAR_4next_pointVAR_4

                   && ((VAR_4chunkedVAR_4 && !((*VAR_4next_pointVAR_4)->VAR_4VAR_1VAR_4.VAR_4flagsVAR_4&VAR_4CHUNK_STARTVAR_4))

                       || !VAR_4VAR_2VAR_4(VAR_4VAR_0VAR_4, &(*VAR_4next_pointVAR_4)->VAR_4VAR_1VAR_4, VAR_4VAR_1VAR_4)))

                VAR_4next_pointVAR_4 = &(*VAR_4next_pointVAR_4)->VAR_4nextVAR_4;

            VAR_4ifVAR_4 (*VAR_4next_pointVAR_4)

                VAR_4gotoVAR_4 VAR_4next_non_nullVAR_4;

        } VAR_4elseVAR_4 {

            VAR_4next_pointVAR_4 = &(VAR_4VAR_0VAR_4->VAR_4internalVAR_4->VAR_4packet_buffer_endVAR_4->VAR_4nextVAR_4);

        }

    }

    VAR_4av_assert1VAR_4(!*VAR_4next_pointVAR_4);



    VAR_4VAR_0VAR_4->VAR_4internalVAR_4->VAR_4packet_buffer_endVAR_4 = VAR_4this_pktlVAR_4;

VAR_4next_non_nullVAR_4:



    VAR_4this_pktlVAR_4->VAR_4nextVAR_4 = *VAR_4next_pointVAR_4;



    VAR_4VAR_0VAR_4->VAR_4streamsVAR_4[VAR_4VAR_1VAR_4->VAR_4stream_indexVAR_4]->VAR_4last_in_packet_bufferVAR_4 =

        *VAR_4next_pointVAR_4                                      = VAR_4this_pktlVAR_4;



    VAR_4av_packet_unrefVAR_4(VAR_4VAR_1VAR_4);



    VAR_4returnVAR_4 VAR_40VAR_4;

}

VAR_4intVAR_4 VAR_4ff_interleave_add_packetVAR_4(VAR_4AVFormatContextVAR_4 *VAR_4VAR_0VAR_4, VAR_4AVPacketVAR_4 *VAR_4VAR_1VAR_4,
VAR_4intVAR_4 (*VAR_4VAR_2VAR_4)(VAR_4AVFormatContextVAR_4 *, VAR_4AVPacketVAR_4 *, VAR_4AVPacketVAR_4 *))
{ VAR_4intVAR_4 VAR_4retVAR_4; VAR_4AVPacketListVAR_4 **VAR_4next_pointVAR_4, *VAR_4this_pktlVAR_4; VAR_4AVStreamVAR_4 *VAR_4stVAR_4   = VAR_4VAR_0VAR_4->VAR_4streamsVAR_4[VAR_4VAR_1VAR_4->VAR_4stream_indexVAR_4]; VAR_4intVAR_4 VAR_4chunkedVAR_4    = VAR_4VAR_0VAR_4->VAR_4max_chunk_sizeVAR_4 || VAR_4VAR_0VAR_4->VAR_4max_chunk_durationVAR_4; VAR_4this_pktlVAR_4      = VAR_4av_malloczVAR_4(VAR_4sizeofVAR_4(VAR_4AVPacketListVAR_4)); VAR_4ifVAR_4 (!VAR_4this_pktlVAR_4)
VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4ENOMEMVAR_4); VAR_4ifVAR_4 ((VAR_4VAR_1VAR_4->VAR_4flagsVAR_4 & VAR_4AV_PKT_FLAG_UNCODED_FRAMEVAR_4)) { VAR_4av_assert0VAR_4(VAR_4VAR_1VAR_4->VAR_4sizeVAR_4 == VAR_4UNCODED_FRAME_PACKET_SIZEVAR_4); VAR_4av_assert0VAR_4(((VAR_4AVFrameVAR_4 *)VAR_4VAR_1VAR_4->VAR_4dataVAR_4)->VAR_4bufVAR_4); } VAR_4ifVAR_4 ((VAR_4retVAR_4 = VAR_4av_packet_refVAR_4(&VAR_4this_pktlVAR_4->VAR_4VAR_1VAR_4, VAR_4VAR_1VAR_4)) < VAR_40VAR_4) { VAR_4av_freeVAR_4(VAR_4this_pktlVAR_4); VAR_4returnVAR_4 VAR_4retVAR_4; } VAR_4ifVAR_4 (VAR_4VAR_0VAR_4->VAR_4streamsVAR_4[VAR_4VAR_1VAR_4->VAR_4stream_indexVAR_4]->VAR_4last_in_packet_bufferVAR_4) { VAR_4next_pointVAR_4 = &(VAR_4stVAR_4->VAR_4last_in_packet_bufferVAR_4->VAR_4nextVAR_4); } VAR_4elseVAR_4 { VAR_4next_pointVAR_4 = &VAR_4VAR_0VAR_4->VAR_4internalVAR_4->VAR_4packet_bufferVAR_4; } VAR_4ifVAR_4 (VAR_4chunkedVAR_4) { VAR_4uint64_tVAR_4 VAR_4maxVAR_4= VAR_4av_rescale_q_rndVAR_4(VAR_4VAR_0VAR_4->VAR_4max_chunk_durationVAR_4, VAR_4AV_TIME_BASE_QVAR_4, VAR_4stVAR_4->VAR_4time_baseVAR_4, VAR_4AV_ROUND_UPVAR_4); VAR_4stVAR_4->VAR_4interleaver_chunk_sizeVAR_4     += VAR_4VAR_1VAR_4->VAR_4sizeVAR_4; VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4 += VAR_4VAR_1VAR_4->VAR_4durationVAR_4; VAR_4ifVAR_4 (   (VAR_4VAR_0VAR_4->VAR_4max_chunk_sizeVAR_4 && VAR_4stVAR_4->VAR_4interleaver_chunk_sizeVAR_4 > VAR_4VAR_0VAR_4->VAR_4max_chunk_sizeVAR_4)
|| (VAR_4maxVAR_4 && VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4           > VAR_4maxVAR_4)) { VAR_4stVAR_4->VAR_4interleaver_chunk_sizeVAR_4      = VAR_40VAR_4; VAR_4this_pktlVAR_4->VAR_4VAR_1VAR_4.VAR_4flagsVAR_4 |= VAR_4CHUNK_STARTVAR_4; VAR_4ifVAR_4 (VAR_4maxVAR_4 && VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4 > VAR_4maxVAR_4) { VAR_4int64_tVAR_4 VAR_4syncoffsetVAR_4 = (VAR_4stVAR_4->VAR_4codecVAR_4->VAR_4codec_typeVAR_4 == VAR_4AVMEDIA_TYPE_VIDEOVAR_4)*VAR_4maxVAR_4/VAR_42VAR_4; VAR_4int64_tVAR_4 VAR_4synctoVAR_4 = VAR_4av_rescaleVAR_4(VAR_4VAR_1VAR_4->VAR_4dtsVAR_4 + VAR_4syncoffsetVAR_4, VAR_41VAR_4, VAR_4maxVAR_4)*VAR_4maxVAR_4 - VAR_4syncoffsetVAR_4; VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4 += (VAR_4VAR_1VAR_4->VAR_4dtsVAR_4 - VAR_4synctoVAR_4)/VAR_48VAR_4 - VAR_4maxVAR_4; } VAR_4elseVAR_4 VAR_4stVAR_4->VAR_4interleaver_chunk_durationVAR_4 = VAR_40VAR_4; } } VAR_4ifVAR_4 (*VAR_4next_pointVAR_4) { VAR_4ifVAR_4 (VAR_4chunkedVAR_4 && !(VAR_4this_pktlVAR_4->VAR_4VAR_1VAR_4.VAR_4flagsVAR_4 & VAR_4CHUNK_STARTVAR_4))
VAR_4gotoVAR_4 VAR_4next_non_nullVAR_4; VAR_4ifVAR_4 (VAR_4VAR_2VAR_4(VAR_4VAR_0VAR_4, &VAR_4VAR_0VAR_4->VAR_4internalVAR_4->VAR_4packet_buffer_endVAR_4->VAR_4VAR_1VAR_4, VAR_4VAR_1VAR_4)) { VAR_4whileVAR_4 (   *VAR_4next_pointVAR_4
&& ((VAR_4chunkedVAR_4 && !((*VAR_4next_pointVAR_4)->VAR_4VAR_1VAR_4.VAR_4flagsVAR_4&VAR_4CHUNK_STARTVAR_4))
|| !VAR_4VAR_2VAR_4(VAR_4VAR_0VAR_4, &(*VAR_4next_pointVAR_4)->VAR_4VAR_1VAR_4, VAR_4VAR_1VAR_4)))
VAR_4next_pointVAR_4 = &(*VAR_4next_pointVAR_4)->VAR_4nextVAR_4; VAR_4ifVAR_4 (*VAR_4next_pointVAR_4)
VAR_4gotoVAR_4 VAR_4next_non_nullVAR_4; } VAR_4elseVAR_4 { VAR_4next_pointVAR_4 = &(VAR_4VAR_0VAR_4->VAR_4internalVAR_4->VAR_4packet_buffer_endVAR_4->VAR_4nextVAR_4); } } VAR_4av_assert1VAR_4(!*VAR_4next_pointVAR_4); VAR_4VAR_0VAR_4->VAR_4internalVAR_4->VAR_4packet_buffer_endVAR_4 = VAR_4this_pktlVAR_4; VAR_4next_non_nullVAR_4:
VAR_4this_pktlVAR_4->VAR_4nextVAR_4 = *VAR_4next_pointVAR_4; VAR_4VAR_0VAR_4->VAR_4streamsVAR_4[VAR_4VAR_1VAR_4->VAR_4stream_indexVAR_4]->VAR_4last_in_packet_bufferVAR_4 =
*VAR_4next_pointVAR_4                                      = VAR_4this_pktlVAR_4; VAR_4av_packet_unrefVAR_4(VAR_4VAR_1VAR_4); VAR_4returnVAR_4 VAR_40VAR_4; }