static int parse(AVCodecParserContext *ctx,

                 AVCodecContext *avctx,

                 const uint8_t **out_data, int *out_size,

                 const uint8_t *data, int size)

{

    VP9ParseContext *s = ctx->priv_data;

    int full_size = size;

    int marker;



    if (size <= 0) {

        *out_size = 0;

        *out_data = data;



        return 0;

    }



    if (s->n_frames > 0) {

        *out_data = data;

        *out_size = s->size[--s->n_frames];

        parse_frame(ctx, *out_data, *out_size);



        return s->n_frames > 0 ? *out_size : size /* i.e. include idx tail */;

    }



    marker = data[size - 1];

    if ((marker & 0xe0) == 0xc0) {

        int nbytes = 1 + ((marker >> 3) & 0x3);

        int n_frames = 1 + (marker & 0x7), idx_sz = 2 + n_frames * nbytes;



        if (size >= idx_sz && data[size - idx_sz] == marker) {

            const uint8_t *idx = data + size + 1 - idx_sz;

            int first = 1;



            switch (nbytes) {

#define case_n(a, rd) \

            case a: \

                while (n_frames--) { \

                    unsigned sz = rd; \

                    idx += a; \

                    if (sz > size) { \

                        s->n_frames = 0; \

                        *out_size = size; \

                        *out_data = data; \

                        av_log(avctx, AV_LOG_ERROR, \

                               "Superframe packet size too big: %u > %d\n", \

                               sz, size); \

                        return full_size; \

                    } \

                    if (first) { \

                        first = 0; \

                        *out_data = data; \

                        *out_size = sz; \

                        s->n_frames = n_frames; \

                    } else { \

                        s->size[n_frames] = sz; \

                    } \

                    data += sz; \

                    size -= sz; \

                } \

                parse_frame(ctx, *out_data, *out_size); \

                return *out_size



                case_n(1, *idx);

                case_n(2, AV_RL16(idx));

                case_n(3, AV_RL24(idx));

                case_n(4, AV_RL32(idx));

            }

        }

    }



    *out_data = data;

    *out_size = size;

    parse_frame(ctx, data, size);



    return size;

}

static int parse(AVCodecParserContext *ctx,

                 AVCodecContext *avctx,

                 const uint8_t **out_data, int *out_size,

                 const uint8_t *data, int size)

{

    VP9ParseContext *s = ctx->priv_data;

    int full_size = size;

    int marker;



    if (size <= 0) {

        *out_size = 0;

        *out_data = data;



        return 0;

    }



    if (s->n_frames > 0) {

        *out_data = data;

        *out_size = s->size[--s->n_frames];

        parse_frame(ctx, *out_data, *out_size);



        return s->n_frames > 0 ? *out_size : size ;

    }



    marker = data[size - 1];

    if ((marker & 0xe0) == 0xc0) {

        int nbytes = 1 + ((marker >> 3) & 0x3);

        int n_frames = 1 + (marker & 0x7), idx_sz = 2 + n_frames * nbytes;



        if (size >= idx_sz && data[size - idx_sz] == marker) {

            const uint8_t *idx = data + size + 1 - idx_sz;

            int first = 1;



            switch (nbytes) {

#define case_n(a, rd) \

            case a: \

                while (n_frames--) { \

                    unsigned sz = rd; \

                    idx += a; \

                    if (sz > size) { \

                        s->n_frames = 0; \

                        *out_size = size; \

                        *out_data = data; \

                        av_log(avctx, AV_LOG_ERROR, \

                               "Superframe packet size too big: %u > %d\n", \

                               sz, size); \

                        return full_size; \

                    } \

                    if (first) { \

                        first = 0; \

                        *out_data = data; \

                        *out_size = sz; \

                        s->n_frames = n_frames; \

                    } else { \

                        s->size[n_frames] = sz; \

                    } \

                    data += sz; \

                    size -= sz; \

                } \

                parse_frame(ctx, *out_data, *out_size); \

                return *out_size



                case_n(1, *idx);

                case_n(2, AV_RL16(idx));

                case_n(3, AV_RL24(idx));

                case_n(4, AV_RL32(idx));

            }

        }

    }



    *out_data = data;

    *out_size = size;

    parse_frame(ctx, data, size);



    return size;

}

                    if (sz > size) { \                                "Superframe packet size too big: %u > %d\n", \
static int FUNC_0(AVCodecParserContext *VAR_0,

                 AVCodecContext *VAR_1,

                 const uint8_t **VAR_2, int *VAR_3,

                 const uint8_t *VAR_4, int VAR_5)

{

    VP9ParseContext *s = VAR_0->priv_data;

    int VAR_6 = VAR_5;

    int VAR_7;



    if (VAR_5 <= 0) {

        *VAR_3 = 0;

        *VAR_2 = VAR_4;



        return 0;

    }



    if (s->VAR_9 > 0) {

        *VAR_2 = VAR_4;

        *VAR_3 = s->VAR_5[--s->VAR_9];

        parse_frame(VAR_0, *VAR_2, *VAR_3);



        return s->VAR_9 > 0 ? *VAR_3 : VAR_5 ;

    }



    VAR_7 = VAR_4[VAR_5 - 1];

    if ((VAR_7 & 0xe0) == 0xc0) {

        int VAR_8 = 1 + ((VAR_7 >> 3) & 0x3);

        int VAR_9 = 1 + (VAR_7 & 0x7), VAR_10 = 2 + VAR_9 * VAR_8;



        if (VAR_5 >= VAR_10 && VAR_4[VAR_5 - VAR_10] == VAR_7) {

            const uint8_t *VAR_11 = VAR_4 + VAR_5 + 1 - VAR_10;

            int VAR_12 = 1;



            switch (VAR_8) {

#define case_n(a, rd) \

            case a: \

                while (VAR_9--) { \

                    unsigned VAR_13 = rd; \

                    VAR_11 += a; \

                    if (VAR_13 > VAR_5) { \

                        s->VAR_9 = 0; \

                        *VAR_3 = VAR_5; \

                        *VAR_2 = VAR_4; \

                        av_log(VAR_1, AV_LOG_ERROR, \

                               "Superframe packet VAR_5 too big: %u > %d\n", \

                               VAR_13, VAR_5); \

                        return VAR_6; \

                    } \

                    if (VAR_12) { \

                        VAR_12 = 0; \

                        *VAR_2 = VAR_4; \

                        *VAR_3 = VAR_13; \

                        s->VAR_9 = VAR_9; \

                    } else { \

                        s->VAR_5[VAR_9] = VAR_13; \

                    } \

                    VAR_4 += VAR_13; \

                    VAR_5 -= VAR_13; \

                } \

                parse_frame(VAR_0, *VAR_2, *VAR_3); \

                return *VAR_3



                case_n(1, *VAR_11);

                case_n(2, AV_RL16(VAR_11));

                case_n(3, AV_RL24(VAR_11));

                case_n(4, AV_RL32(VAR_11));

            }

        }

    }



    *VAR_2 = VAR_4;

    *VAR_3 = VAR_5;

    parse_frame(VAR_0, VAR_4, VAR_5);



    return VAR_5;

}

static int FUNC_0(AVCodecParserContext *VAR_0,
AVCodecContext *VAR_1,
const uint8_t **VAR_2, int *VAR_3,
const uint8_t *VAR_4, int VAR_5)
{ VP9ParseContext *s = VAR_0->priv_data; int VAR_6 = VAR_5; int VAR_7; if (VAR_5 <= 0) { *VAR_3 = 0; *VAR_2 = VAR_4; return 0; } if (s->VAR_9 > 0) { *VAR_2 = VAR_4; *VAR_3 = s->VAR_5[--s->VAR_9]; parse_frame(VAR_0, *VAR_2, *VAR_3); return s->VAR_9 > 0 ? *VAR_3 : VAR_5 ; } VAR_7 = VAR_4[VAR_5 - 1]; if ((VAR_7 & 0xe0) == 0xc0) { int VAR_8 = 1 + ((VAR_7 >> 3) & 0x3); int VAR_9 = 1 + (VAR_7 & 0x7), VAR_10 = 2 + VAR_9 * VAR_8; if (VAR_5 >= VAR_10 && VAR_4[VAR_5 - VAR_10] == VAR_7) { const uint8_t *VAR_11 = VAR_4 + VAR_5 + 1 - VAR_10; int VAR_12 = 1; switch (VAR_8) { #define case_n(a, rd) \
case a: \
while (VAR_9--) { \ unsigned VAR_13 = rd; \ VAR_11 += a; \ if (VAR_13 > VAR_5) { \ s->VAR_9 = 0; \ *VAR_3 = VAR_5; \ *VAR_2 = VAR_4; \ av_log(VAR_1, AV_LOG_ERROR, \
"Superframe packet VAR_5 too big: %u > %d\n", \
VAR_13, VAR_5); \ return VAR_6; \ } \ if (VAR_12) { \ VAR_12 = 0; \ *VAR_2 = VAR_4; \ *VAR_3 = VAR_13; \ s->VAR_9 = VAR_9; \ } else { \ s->VAR_5[VAR_9] = VAR_13; \ } \ VAR_4 += VAR_13; \ VAR_5 -= VAR_13; \ } \ parse_frame(VAR_0, *VAR_2, *VAR_3); \ return *VAR_3
case_n(1, *VAR_11); case_n(2, AV_RL16(VAR_11)); case_n(3, AV_RL24(VAR_11)); case_n(4, AV_RL32(VAR_11)); } } } *VAR_2 = VAR_4; *VAR_3 = VAR_5; parse_frame(VAR_0, VAR_4, VAR_5); return VAR_5; }