static int parse_header(OutputStream *os, const uint8_t *buf, int buf_size)

{

    if (buf_size < 13)

        return AVERROR_INVALIDDATA;

    if (memcmp(buf, "FLV", 3))

        return AVERROR_INVALIDDATA;

    buf      += 13;

    buf_size -= 13;

    while (buf_size >= 11 + 4) {

        int type = buf[0];

        int size = AV_RB24(&buf[1]) + 11 + 4;

        if (size > buf_size)

            return AVERROR_INVALIDDATA;

        if (type == 8 || type == 9) {

            if (os->nb_extra_packets > FF_ARRAY_ELEMS(os->extra_packets))

                return AVERROR_INVALIDDATA;

            os->extra_packet_sizes[os->nb_extra_packets] = size;

            os->extra_packets[os->nb_extra_packets] = av_malloc(size);

            if (!os->extra_packets[os->nb_extra_packets])

                return AVERROR(ENOMEM);

            memcpy(os->extra_packets[os->nb_extra_packets], buf, size);

            os->nb_extra_packets++;

        } else if (type == 0x12) {

            if (os->metadata)

                return AVERROR_INVALIDDATA;

            os->metadata_size = size - 11 - 4;

            os->metadata      = av_malloc(os->metadata_size);

            if (!os->metadata)

                return AVERROR(ENOMEM);

            memcpy(os->metadata, buf + 11, os->metadata_size);

        }

        buf      += size;

        buf_size -= size;

    }

    if (!os->metadata)

        return AVERROR_INVALIDDATA;

    return 0;

}

static int parse_header(OutputStream *os, const uint8_t *buf, int buf_size)

{

    if (buf_size < 13)

        return AVERROR_INVALIDDATA;

    if (memcmp(buf, "FLV", 3))

        return AVERROR_INVALIDDATA;

    buf      += 13;

    buf_size -= 13;

    while (buf_size >= 11 + 4) {

        int type = buf[0];

        int size = AV_RB24(&buf[1]) + 11 + 4;

        if (size > buf_size)

            return AVERROR_INVALIDDATA;

        if (type == 8 || type == 9) {

            if (os->nb_extra_packets > FF_ARRAY_ELEMS(os->extra_packets))

                return AVERROR_INVALIDDATA;

            os->extra_packet_sizes[os->nb_extra_packets] = size;

            os->extra_packets[os->nb_extra_packets] = av_malloc(size);

            if (!os->extra_packets[os->nb_extra_packets])

                return AVERROR(ENOMEM);

            memcpy(os->extra_packets[os->nb_extra_packets], buf, size);

            os->nb_extra_packets++;

        } else if (type == 0x12) {

            if (os->metadata)

                return AVERROR_INVALIDDATA;

            os->metadata_size = size - 11 - 4;

            os->metadata      = av_malloc(os->metadata_size);

            if (!os->metadata)

                return AVERROR(ENOMEM);

            memcpy(os->metadata, buf + 11, os->metadata_size);

        }

        buf      += size;

        buf_size -= size;

    }

    if (!os->metadata)

        return AVERROR_INVALIDDATA;

    return 0;

}

static int FUNC_0(OutputStream *VAR_0, const uint8_t *VAR_1, int VAR_2)

{

    if (VAR_2 < 13)

        return AVERROR_INVALIDDATA;

    if (memcmp(VAR_1, "FLV", 3))

        return AVERROR_INVALIDDATA;

    VAR_1      += 13;

    VAR_2 -= 13;

    while (VAR_2 >= 11 + 4) {

        int VAR_3 = VAR_1[0];

        int VAR_4 = AV_RB24(&VAR_1[1]) + 11 + 4;

        if (VAR_4 > VAR_2)

            return AVERROR_INVALIDDATA;

        if (VAR_3 == 8 || VAR_3 == 9) {

            if (VAR_0->nb_extra_packets > FF_ARRAY_ELEMS(VAR_0->extra_packets))

                return AVERROR_INVALIDDATA;

            VAR_0->extra_packet_sizes[VAR_0->nb_extra_packets] = VAR_4;

            VAR_0->extra_packets[VAR_0->nb_extra_packets] = av_malloc(VAR_4);

            if (!VAR_0->extra_packets[VAR_0->nb_extra_packets])

                return AVERROR(ENOMEM);

            memcpy(VAR_0->extra_packets[VAR_0->nb_extra_packets], VAR_1, VAR_4);

            VAR_0->nb_extra_packets++;

        } else if (VAR_3 == 0x12) {

            if (VAR_0->metadata)

                return AVERROR_INVALIDDATA;

            VAR_0->metadata_size = VAR_4 - 11 - 4;

            VAR_0->metadata      = av_malloc(VAR_0->metadata_size);

            if (!VAR_0->metadata)

                return AVERROR(ENOMEM);

            memcpy(VAR_0->metadata, VAR_1 + 11, VAR_0->metadata_size);

        }

        VAR_1      += VAR_4;

        VAR_2 -= VAR_4;

    }

    if (!VAR_0->metadata)

        return AVERROR_INVALIDDATA;

    return 0;

}

static int FUNC_0(OutputStream *VAR_0, const uint8_t *VAR_1, int VAR_2)
{ if (VAR_2 < 13)
return AVERROR_INVALIDDATA; if (memcmp(VAR_1, "FLV", 3))
return AVERROR_INVALIDDATA; VAR_1      += 13; VAR_2 -= 13; while (VAR_2 >= 11 + 4) { int VAR_3 = VAR_1[0]; int VAR_4 = AV_RB24(&VAR_1[1]) + 11 + 4; if (VAR_4 > VAR_2)
return AVERROR_INVALIDDATA; if (VAR_3 == 8 || VAR_3 == 9) { if (VAR_0->nb_extra_packets > FF_ARRAY_ELEMS(VAR_0->extra_packets))
return AVERROR_INVALIDDATA; VAR_0->extra_packet_sizes[VAR_0->nb_extra_packets] = VAR_4; VAR_0->extra_packets[VAR_0->nb_extra_packets] = av_malloc(VAR_4); if (!VAR_0->extra_packets[VAR_0->nb_extra_packets])
return AVERROR(ENOMEM); memcpy(VAR_0->extra_packets[VAR_0->nb_extra_packets], VAR_1, VAR_4); VAR_0->nb_extra_packets++; } else if (VAR_3 == 0x12) { if (VAR_0->metadata)
return AVERROR_INVALIDDATA; VAR_0->metadata_size = VAR_4 - 11 - 4; VAR_0->metadata      = av_malloc(VAR_0->metadata_size); if (!VAR_0->metadata)
return AVERROR(ENOMEM); memcpy(VAR_0->metadata, VAR_1 + 11, VAR_0->metadata_size); } VAR_1      += VAR_4; VAR_2 -= VAR_4; } if (!VAR_0->metadata)
return AVERROR_INVALIDDATA; return 0; }