static int h264_extradata_to_annexb(AVCodecContext *avctx, const int padding)

{

    uint16_t unit_size;

    uint64_t total_size                 = 0;

    uint8_t *out                        = NULL, unit_nb, sps_done = 0,

             sps_seen                   = 0, pps_seen = 0;

    const uint8_t *extradata            = avctx->extradata + 4;

    static const uint8_t nalu_header[4] = { 0, 0, 0, 1 };

    int length_size = (*extradata++ & 0x3) + 1; // retrieve length coded size



    /* retrieve sps and pps unit(s) */

    unit_nb = *extradata++ & 0x1f; /* number of sps unit(s) */

    if (!unit_nb) {

        goto pps;

    } else {

        sps_seen = 1;

    }



    while (unit_nb--) {

        void *tmp;



        unit_size   = AV_RB16(extradata);

        total_size += unit_size + 4;

        if (total_size > INT_MAX - padding ||

            extradata + 2 + unit_size > avctx->extradata +

            avctx->extradata_size) {

            av_free(out);

            return AVERROR(EINVAL);

        }

        tmp = av_realloc(out, total_size + padding);

        if (!tmp) {

            av_free(out);

            return AVERROR(ENOMEM);

        }

        out = tmp;

        memcpy(out + total_size - unit_size - 4, nalu_header, 4);

        memcpy(out + total_size - unit_size, extradata + 2, unit_size);

        extradata += 2 + unit_size;

pps:

        if (!unit_nb && !sps_done++) {

            unit_nb = *extradata++; /* number of pps unit(s) */

            if (unit_nb)

                pps_seen = 1;

        }

    }



    if (out)

        memset(out + total_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);



    if (!sps_seen)

        av_log(avctx, AV_LOG_WARNING,

               "Warning: SPS NALU missing or invalid. "

               "The resulting stream may not play.\n");



    if (!pps_seen)

        av_log(avctx, AV_LOG_WARNING,

               "Warning: PPS NALU missing or invalid. "

               "The resulting stream may not play.\n");



    av_free(avctx->extradata);

    avctx->extradata      = out;

    avctx->extradata_size = total_size;



    return length_size;

}

static int h264_extradata_to_annexb(AVCodecContext *avctx, const int padding)

{

    uint16_t unit_size;

    uint64_t total_size                 = 0;

    uint8_t *out                        = NULL, unit_nb, sps_done = 0,

             sps_seen                   = 0, pps_seen = 0;

    const uint8_t *extradata            = avctx->extradata + 4;

    static const uint8_t nalu_header[4] = { 0, 0, 0, 1 };

    int length_size = (*extradata++ & 0x3) + 1; 



    

    unit_nb = *extradata++ & 0x1f; 

    if (!unit_nb) {

        goto pps;

    } else {

        sps_seen = 1;

    }



    while (unit_nb--) {

        void *tmp;



        unit_size   = AV_RB16(extradata);

        total_size += unit_size + 4;

        if (total_size > INT_MAX - padding ||

            extradata + 2 + unit_size > avctx->extradata +

            avctx->extradata_size) {

            av_free(out);

            return AVERROR(EINVAL);

        }

        tmp = av_realloc(out, total_size + padding);

        if (!tmp) {

            av_free(out);

            return AVERROR(ENOMEM);

        }

        out = tmp;

        memcpy(out + total_size - unit_size - 4, nalu_header, 4);

        memcpy(out + total_size - unit_size, extradata + 2, unit_size);

        extradata += 2 + unit_size;

pps:

        if (!unit_nb && !sps_done++) {

            unit_nb = *extradata++; 

            if (unit_nb)

                pps_seen = 1;

        }

    }



    if (out)

        memset(out + total_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);



    if (!sps_seen)

        av_log(avctx, AV_LOG_WARNING,

               "Warning: SPS NALU missing or invalid. "

               "The resulting stream may not play.\n");



    if (!pps_seen)

        av_log(avctx, AV_LOG_WARNING,

               "Warning: PPS NALU missing or invalid. "

               "The resulting stream may not play.\n");



    av_free(avctx->extradata);

    avctx->extradata      = out;

    avctx->extradata_size = total_size;



    return length_size;

}

static int FUNC_0(AVCodecContext *VAR_0, const int VAR_1)

{

    uint16_t unit_size;

    uint64_t total_size                 = 0;

    uint8_t *out                        = NULL, unit_nb, sps_done = 0,

             sps_seen                   = 0, pps_seen = 0;

    const uint8_t *VAR_2            = VAR_0->VAR_2 + 4;

    static const uint8_t VAR_3[4] = { 0, 0, 0, 1 };

    int VAR_4 = (*VAR_2++ & 0x3) + 1; 



    

    unit_nb = *VAR_2++ & 0x1f; 

    if (!unit_nb) {

        goto pps;

    } else {

        sps_seen = 1;

    }



    while (unit_nb--) {

        void *VAR_5;



        unit_size   = AV_RB16(VAR_2);

        total_size += unit_size + 4;

        if (total_size > INT_MAX - VAR_1 ||

            VAR_2 + 2 + unit_size > VAR_0->VAR_2 +

            VAR_0->extradata_size) {

            av_free(out);

            return AVERROR(EINVAL);

        }

        VAR_5 = av_realloc(out, total_size + VAR_1);

        if (!VAR_5) {

            av_free(out);

            return AVERROR(ENOMEM);

        }

        out = VAR_5;

        memcpy(out + total_size - unit_size - 4, VAR_3, 4);

        memcpy(out + total_size - unit_size, VAR_2 + 2, unit_size);

        VAR_2 += 2 + unit_size;

pps:

        if (!unit_nb && !sps_done++) {

            unit_nb = *VAR_2++; 

            if (unit_nb)

                pps_seen = 1;

        }

    }



    if (out)

        memset(out + total_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);



    if (!sps_seen)

        av_log(VAR_0, AV_LOG_WARNING,

               "Warning: SPS NALU missing or invalid. "

               "The resulting stream may not play.\n");



    if (!pps_seen)

        av_log(VAR_0, AV_LOG_WARNING,

               "Warning: PPS NALU missing or invalid. "

               "The resulting stream may not play.\n");



    av_free(VAR_0->VAR_2);

    VAR_0->VAR_2      = out;

    VAR_0->extradata_size = total_size;



    return VAR_4;

}

static int FUNC_0(AVCodecContext *VAR_0, const int VAR_1)
{ uint16_t unit_size; uint64_t total_size                 = 0; uint8_t *out                        = NULL, unit_nb, sps_done = 0,
sps_seen                   = 0, pps_seen = 0; const uint8_t *VAR_2            = VAR_0->VAR_2 + 4; static const uint8_t VAR_3[4] = { 0, 0, 0, 1 }; int VAR_4 = (*VAR_2++ & 0x3) + 1; unit_nb = *VAR_2++ & 0x1f; if (!unit_nb) { goto pps; } else { sps_seen = 1; } while (unit_nb--) { void *VAR_5; unit_size   = AV_RB16(VAR_2); total_size += unit_size + 4; if (total_size > INT_MAX - VAR_1 ||
VAR_2 + 2 + unit_size > VAR_0->VAR_2 +
VAR_0->extradata_size) { av_free(out); return AVERROR(EINVAL); } VAR_5 = av_realloc(out, total_size + VAR_1); if (!VAR_5) { av_free(out); return AVERROR(ENOMEM); } out = VAR_5; memcpy(out + total_size - unit_size - 4, VAR_3, 4); memcpy(out + total_size - unit_size, VAR_2 + 2, unit_size); VAR_2 += 2 + unit_size; pps:
if (!unit_nb && !sps_done++) { unit_nb = *VAR_2++; if (unit_nb)
pps_seen = 1; } } if (out)
memset(out + total_size, 0, FF_INPUT_BUFFER_PADDING_SIZE); if (!sps_seen)
av_log(VAR_0, AV_LOG_WARNING,
"Warning: SPS NALU missing or invalid. "
"The resulting stream may not play.\n"); if (!pps_seen)
av_log(VAR_0, AV_LOG_WARNING,
"Warning: PPS NALU missing or invalid. "
"The resulting stream may not play.\n"); av_free(VAR_0->VAR_2); VAR_0->VAR_2      = out; VAR_0->extradata_size = total_size; return VAR_4; }