static int zero12v_decode_frame(AVCodecContext *avctx, void *data,

                                int *got_frame, AVPacket *avpkt)

{

    int line = 0, ret;

    const int width = avctx->width;

    AVFrame *pic = data;

    uint16_t *y, *u, *v;

    const uint8_t *line_end, *src = avpkt->data;

    int stride = avctx->width * 8 / 3;



    if (width == 1) {

        av_log(avctx, AV_LOG_ERROR, "Width 1 not supported.\n");

        return AVERROR_INVALIDDATA;

    }



    if (   avctx->codec_tag == MKTAG('0', '1', '2', 'v')

        && avpkt->size % avctx->height == 0

        && avpkt->size / avctx->height * 3 >= width * 8)

        stride = avpkt->size / avctx->height;



    if (avpkt->size < avctx->height * stride) {

        av_log(avctx, AV_LOG_ERROR, "Packet too small: %d instead of %d\n",

               avpkt->size, avctx->height * stride);

        return AVERROR_INVALIDDATA;

    }



    if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)

        return ret;



    pic->pict_type = AV_PICTURE_TYPE_I;

    pic->key_frame = 1;



    y = (uint16_t *)pic->data[0];

    u = (uint16_t *)pic->data[1];

    v = (uint16_t *)pic->data[2];

    line_end = avpkt->data + stride;



    while (line++ < avctx->height) {

        while (1) {

            uint32_t t = AV_RL32(src);

            src += 4;

            *u++ = t <<  6 & 0xFFC0;

            *y++ = t >>  4 & 0xFFC0;

            *v++ = t >> 14 & 0xFFC0;



            if (src >= line_end - 1) {

                *y = 0x80;

                src++;

                line_end += stride;

                y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);

                u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);

                v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);

                break;

            }



            t = AV_RL32(src);

            src += 4;

            *y++ = t <<  6 & 0xFFC0;

            *u++ = t >>  4 & 0xFFC0;

            *y++ = t >> 14 & 0xFFC0;

            if (src >= line_end - 2) {

                if (!(width & 1)) {

                    *y = 0x80;

                    src += 2;

                }

                line_end += stride;

                y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);

                u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);

                v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);

                break;

            }



            t = AV_RL32(src);

            src += 4;

            *v++ = t <<  6 & 0xFFC0;

            *y++ = t >>  4 & 0xFFC0;

            *u++ = t >> 14 & 0xFFC0;



            if (src >= line_end - 1) {

                *y = 0x80;

                src++;

                line_end += stride;

                y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);

                u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);

                v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);

                break;

            }



            t = AV_RL32(src);

            src += 4;

            *y++ = t <<  6 & 0xFFC0;

            *v++ = t >>  4 & 0xFFC0;

            *y++ = t >> 14 & 0xFFC0;



            if (src >= line_end - 2) {

                if (width & 1) {

                    *y = 0x80;

                    src += 2;

                }

                line_end += stride;

                y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);

                u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);

                v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);

                break;

            }

        }

    }



    *got_frame = 1;



    return avpkt->size;

}

static int zero12v_decode_frame(AVCodecContext *avctx, void *data,

                                int *got_frame, AVPacket *avpkt)

{

    int line = 0, ret;

    const int width = avctx->width;

    AVFrame *pic = data;

    uint16_t *y, *u, *v;

    const uint8_t *line_end, *src = avpkt->data;

    int stride = avctx->width * 8 / 3;



    if (width == 1) {

        av_log(avctx, AV_LOG_ERROR, "Width 1 not supported.\n");

        return AVERROR_INVALIDDATA;

    }



    if (   avctx->codec_tag == MKTAG('0', '1', '2', 'v')

        && avpkt->size % avctx->height == 0

        && avpkt->size / avctx->height * 3 >= width * 8)

        stride = avpkt->size / avctx->height;



    if (avpkt->size < avctx->height * stride) {

        av_log(avctx, AV_LOG_ERROR, "Packet too small: %d instead of %d\n",

               avpkt->size, avctx->height * stride);

        return AVERROR_INVALIDDATA;

    }



    if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)

        return ret;



    pic->pict_type = AV_PICTURE_TYPE_I;

    pic->key_frame = 1;



    y = (uint16_t *)pic->data[0];

    u = (uint16_t *)pic->data[1];

    v = (uint16_t *)pic->data[2];

    line_end = avpkt->data + stride;



    while (line++ < avctx->height) {

        while (1) {

            uint32_t t = AV_RL32(src);

            src += 4;

            *u++ = t <<  6 & 0xFFC0;

            *y++ = t >>  4 & 0xFFC0;

            *v++ = t >> 14 & 0xFFC0;



            if (src >= line_end - 1) {

                *y = 0x80;

                src++;

                line_end += stride;

                y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);

                u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);

                v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);

                break;

            }



            t = AV_RL32(src);

            src += 4;

            *y++ = t <<  6 & 0xFFC0;

            *u++ = t >>  4 & 0xFFC0;

            *y++ = t >> 14 & 0xFFC0;

            if (src >= line_end - 2) {

                if (!(width & 1)) {

                    *y = 0x80;

                    src += 2;

                }

                line_end += stride;

                y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);

                u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);

                v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);

                break;

            }



            t = AV_RL32(src);

            src += 4;

            *v++ = t <<  6 & 0xFFC0;

            *y++ = t >>  4 & 0xFFC0;

            *u++ = t >> 14 & 0xFFC0;



            if (src >= line_end - 1) {

                *y = 0x80;

                src++;

                line_end += stride;

                y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);

                u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);

                v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);

                break;

            }



            t = AV_RL32(src);

            src += 4;

            *y++ = t <<  6 & 0xFFC0;

            *v++ = t >>  4 & 0xFFC0;

            *y++ = t >> 14 & 0xFFC0;



            if (src >= line_end - 2) {

                if (width & 1) {

                    *y = 0x80;

                    src += 2;

                }

                line_end += stride;

                y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);

                u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);

                v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);

                break;

            }

        }

    }



    *got_frame = 1;



    return avpkt->size;

}

    if (width == 1) {         av_log(avctx, AV_LOG_ERROR, "Width 1 not supported.\n");
static int FUNC_0(AVCodecContext *VAR_0, void *VAR_1,

                                int *VAR_2, AVPacket *VAR_3)

{

    int VAR_4 = 0, VAR_5;

    const int VAR_6 = VAR_0->VAR_6;

    AVFrame *pic = VAR_1;

    uint16_t *y, *u, *v;

    const uint8_t *VAR_7, *src = VAR_3->VAR_1;

    int VAR_8 = VAR_0->VAR_6 * 8 / 3;



    if (VAR_6 == 1) {

        av_log(VAR_0, AV_LOG_ERROR, "Width 1 not supported.\n");

        return AVERROR_INVALIDDATA;

    }



    if (   VAR_0->codec_tag == MKTAG('0', '1', '2', 'v')

        && VAR_3->size % VAR_0->height == 0

        && VAR_3->size / VAR_0->height * 3 >= VAR_6 * 8)

        VAR_8 = VAR_3->size / VAR_0->height;



    if (VAR_3->size < VAR_0->height * VAR_8) {

        av_log(VAR_0, AV_LOG_ERROR, "Packet too small: %d instead of %d\n",

               VAR_3->size, VAR_0->height * VAR_8);

        return AVERROR_INVALIDDATA;

    }



    if ((VAR_5 = ff_get_buffer(VAR_0, pic, 0)) < 0)

        return VAR_5;



    pic->pict_type = AV_PICTURE_TYPE_I;

    pic->key_frame = 1;



    y = (uint16_t *)pic->VAR_1[0];

    u = (uint16_t *)pic->VAR_1[1];

    v = (uint16_t *)pic->VAR_1[2];

    VAR_7 = VAR_3->VAR_1 + VAR_8;



    while (VAR_4++ < VAR_0->height) {

        while (1) {

            uint32_t t = AV_RL32(src);

            src += 4;

            *u++ = t <<  6 & 0xFFC0;

            *y++ = t >>  4 & 0xFFC0;

            *v++ = t >> 14 & 0xFFC0;



            if (src >= VAR_7 - 1) {

                *y = 0x80;

                src++;

                VAR_7 += VAR_8;

                y = (uint16_t *)(pic->VAR_1[0] + VAR_4 * pic->linesize[0]);

                u = (uint16_t *)(pic->VAR_1[1] + VAR_4 * pic->linesize[1]);

                v = (uint16_t *)(pic->VAR_1[2] + VAR_4 * pic->linesize[2]);

                break;

            }



            t = AV_RL32(src);

            src += 4;

            *y++ = t <<  6 & 0xFFC0;

            *u++ = t >>  4 & 0xFFC0;

            *y++ = t >> 14 & 0xFFC0;

            if (src >= VAR_7 - 2) {

                if (!(VAR_6 & 1)) {

                    *y = 0x80;

                    src += 2;

                }

                VAR_7 += VAR_8;

                y = (uint16_t *)(pic->VAR_1[0] + VAR_4 * pic->linesize[0]);

                u = (uint16_t *)(pic->VAR_1[1] + VAR_4 * pic->linesize[1]);

                v = (uint16_t *)(pic->VAR_1[2] + VAR_4 * pic->linesize[2]);

                break;

            }



            t = AV_RL32(src);

            src += 4;

            *v++ = t <<  6 & 0xFFC0;

            *y++ = t >>  4 & 0xFFC0;

            *u++ = t >> 14 & 0xFFC0;



            if (src >= VAR_7 - 1) {

                *y = 0x80;

                src++;

                VAR_7 += VAR_8;

                y = (uint16_t *)(pic->VAR_1[0] + VAR_4 * pic->linesize[0]);

                u = (uint16_t *)(pic->VAR_1[1] + VAR_4 * pic->linesize[1]);

                v = (uint16_t *)(pic->VAR_1[2] + VAR_4 * pic->linesize[2]);

                break;

            }



            t = AV_RL32(src);

            src += 4;

            *y++ = t <<  6 & 0xFFC0;

            *v++ = t >>  4 & 0xFFC0;

            *y++ = t >> 14 & 0xFFC0;



            if (src >= VAR_7 - 2) {

                if (VAR_6 & 1) {

                    *y = 0x80;

                    src += 2;

                }

                VAR_7 += VAR_8;

                y = (uint16_t *)(pic->VAR_1[0] + VAR_4 * pic->linesize[0]);

                u = (uint16_t *)(pic->VAR_1[1] + VAR_4 * pic->linesize[1]);

                v = (uint16_t *)(pic->VAR_1[2] + VAR_4 * pic->linesize[2]);

                break;

            }

        }

    }



    *VAR_2 = 1;



    return VAR_3->size;

}

static int FUNC_0(AVCodecContext *VAR_0, void *VAR_1,
int *VAR_2, AVPacket *VAR_3)
{ int VAR_4 = 0, VAR_5; const int VAR_6 = VAR_0->VAR_6; AVFrame *pic = VAR_1; uint16_t *y, *u, *v; const uint8_t *VAR_7, *src = VAR_3->VAR_1; int VAR_8 = VAR_0->VAR_6 * 8 / 3; if (VAR_6 == 1) { av_log(VAR_0, AV_LOG_ERROR, "Width 1 not supported.\n"); return AVERROR_INVALIDDATA; } if (   VAR_0->codec_tag == MKTAG('0', '1', '2', 'v')
&& VAR_3->size % VAR_0->height == 0
&& VAR_3->size / VAR_0->height * 3 >= VAR_6 * 8)
VAR_8 = VAR_3->size / VAR_0->height; if (VAR_3->size < VAR_0->height * VAR_8) { av_log(VAR_0, AV_LOG_ERROR, "Packet too small: %d instead of %d\n",
VAR_3->size, VAR_0->height * VAR_8); return AVERROR_INVALIDDATA; } if ((VAR_5 = ff_get_buffer(VAR_0, pic, 0)) < 0)
return VAR_5; pic->pict_type = AV_PICTURE_TYPE_I; pic->key_frame = 1; y = (uint16_t *)pic->VAR_1[0]; u = (uint16_t *)pic->VAR_1[1]; v = (uint16_t *)pic->VAR_1[2]; VAR_7 = VAR_3->VAR_1 + VAR_8; while (VAR_4++ < VAR_0->height) { while (1) { uint32_t t = AV_RL32(src); src += 4; *u++ = t <<  6 & 0xFFC0; *y++ = t >>  4 & 0xFFC0; *v++ = t >> 14 & 0xFFC0; if (src >= VAR_7 - 1) { *y = 0x80; src++; VAR_7 += VAR_8; y = (uint16_t *)(pic->VAR_1[0] + VAR_4 * pic->linesize[0]); u = (uint16_t *)(pic->VAR_1[1] + VAR_4 * pic->linesize[1]); v = (uint16_t *)(pic->VAR_1[2] + VAR_4 * pic->linesize[2]); break; } t = AV_RL32(src); src += 4; *y++ = t <<  6 & 0xFFC0; *u++ = t >>  4 & 0xFFC0; *y++ = t >> 14 & 0xFFC0; if (src >= VAR_7 - 2) { if (!(VAR_6 & 1)) { *y = 0x80; src += 2; } VAR_7 += VAR_8; y = (uint16_t *)(pic->VAR_1[0] + VAR_4 * pic->linesize[0]); u = (uint16_t *)(pic->VAR_1[1] + VAR_4 * pic->linesize[1]); v = (uint16_t *)(pic->VAR_1[2] + VAR_4 * pic->linesize[2]); break; } t = AV_RL32(src); src += 4; *v++ = t <<  6 & 0xFFC0; *y++ = t >>  4 & 0xFFC0; *u++ = t >> 14 & 0xFFC0; if (src >= VAR_7 - 1) { *y = 0x80; src++; VAR_7 += VAR_8; y = (uint16_t *)(pic->VAR_1[0] + VAR_4 * pic->linesize[0]); u = (uint16_t *)(pic->VAR_1[1] + VAR_4 * pic->linesize[1]); v = (uint16_t *)(pic->VAR_1[2] + VAR_4 * pic->linesize[2]); break; } t = AV_RL32(src); src += 4; *y++ = t <<  6 & 0xFFC0; *v++ = t >>  4 & 0xFFC0; *y++ = t >> 14 & 0xFFC0; if (src >= VAR_7 - 2) { if (VAR_6 & 1) { *y = 0x80; src += 2; } VAR_7 += VAR_8; y = (uint16_t *)(pic->VAR_1[0] + VAR_4 * pic->linesize[0]); u = (uint16_t *)(pic->VAR_1[1] + VAR_4 * pic->linesize[1]); v = (uint16_t *)(pic->VAR_1[2] + VAR_4 * pic->linesize[2]); break; } } } *VAR_2 = 1; return VAR_3->size; }