static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,

                        AVPacket *avpkt)

{

    V210DecContext *s = avctx->priv_data;



    int h, w, stride, aligned_input;

    AVFrame *pic = avctx->coded_frame;

    const uint8_t *psrc = avpkt->data;

    uint16_t *y, *u, *v;



    if (s->custom_stride )

        stride = s->custom_stride;

    else {

        int aligned_width = ((avctx->width + 47) / 48) * 48;

        stride = aligned_width * 8 / 3;

    }



    aligned_input = !((uintptr_t)psrc & 0xf) && !(stride & 0xf);

    if (aligned_input != s->aligned_input) {

        s->aligned_input = aligned_input;

        if (HAVE_MMX)

            v210_x86_init(s);

    }



    if (pic->data[0])

        avctx->release_buffer(avctx, pic);



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

        av_log(avctx, AV_LOG_ERROR, "packet too small\n");

        return -1;

    }



    pic->reference = 0;

    if (avctx->get_buffer(avctx, pic) < 0)

        return -1;



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

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

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

    pic->pict_type = AV_PICTURE_TYPE_I;

    pic->key_frame = 1;



    for (h = 0; h < avctx->height; h++) {

        const uint32_t *src = (const uint32_t*)psrc;

        uint32_t val;



        w = (avctx->width / 6) * 6;

        s->unpack_frame(src, y, u, v, w);



        y += w;

        u += w >> 1;

        v += w >> 1;

        src += (w << 1) / 3;



        if (w < avctx->width - 1) {

            READ_PIXELS(u, y, v);



            val  = av_le2ne32(*src++);

            *y++ =  val & 0x3FF;

        }

        if (w < avctx->width - 3) {

            *u++ = (val >> 10) & 0x3FF;

            *y++ = (val >> 20) & 0x3FF;



            val  = av_le2ne32(*src++);

            *v++ =  val & 0x3FF;

            *y++ = (val >> 10) & 0x3FF;

        }



        psrc += stride;

        y += pic->linesize[0] / 2 - avctx->width;

        u += pic->linesize[1] / 2 - avctx->width / 2;

        v += pic->linesize[2] / 2 - avctx->width / 2;

    }



    *data_size = sizeof(AVFrame);

    *(AVFrame*)data = *avctx->coded_frame;



    return avpkt->size;

}

static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,

                        AVPacket *avpkt)

{

    V210DecContext *s = avctx->priv_data;



    int h, w, stride, aligned_input;

    AVFrame *pic = avctx->coded_frame;

    const uint8_t *psrc = avpkt->data;

    uint16_t *y, *u, *v;



    if (s->custom_stride )

        stride = s->custom_stride;

    else {

        int aligned_width = ((avctx->width + 47) / 48) * 48;

        stride = aligned_width * 8 / 3;

    }



    aligned_input = !((uintptr_t)psrc & 0xf) && !(stride & 0xf);

    if (aligned_input != s->aligned_input) {

        s->aligned_input = aligned_input;

        if (HAVE_MMX)

            v210_x86_init(s);

    }



    if (pic->data[0])

        avctx->release_buffer(avctx, pic);



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

        av_log(avctx, AV_LOG_ERROR, "packet too small\n");

        return -1;

    }



    pic->reference = 0;

    if (avctx->get_buffer(avctx, pic) < 0)

        return -1;



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

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

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

    pic->pict_type = AV_PICTURE_TYPE_I;

    pic->key_frame = 1;



    for (h = 0; h < avctx->height; h++) {

        const uint32_t *src = (const uint32_t*)psrc;

        uint32_t val;



        w = (avctx->width / 6) * 6;

        s->unpack_frame(src, y, u, v, w);



        y += w;

        u += w >> 1;

        v += w >> 1;

        src += (w << 1) / 3;



        if (w < avctx->width - 1) {

            READ_PIXELS(u, y, v);



            val  = av_le2ne32(*src++);

            *y++ =  val & 0x3FF;

        }

        if (w < avctx->width - 3) {

            *u++ = (val >> 10) & 0x3FF;

            *y++ = (val >> 20) & 0x3FF;



            val  = av_le2ne32(*src++);

            *v++ =  val & 0x3FF;

            *y++ = (val >> 10) & 0x3FF;

        }



        psrc += stride;

        y += pic->linesize[0] / 2 - avctx->width;

        u += pic->linesize[1] / 2 - avctx->width / 2;

        v += pic->linesize[2] / 2 - avctx->width / 2;

    }



    *data_size = sizeof(AVFrame);

    *(AVFrame*)data = *avctx->coded_frame;



    return avpkt->size;

}

        if (w < avctx->width - 3) {             *u++ = (val >> 10) & 0x3FF;             *y++ = (val >> 20) & 0x3FF;             val  = av_le2ne32(*src++);             *v++ =  val & 0x3FF;             *y++ = (val >> 10) & 0x3FF;
static int FUNC_0(AVCodecContext *VAR_0, void *VAR_1, int *VAR_2,

                        AVPacket *VAR_3)

{

    V210DecContext *s = VAR_0->priv_data;



    int VAR_4, VAR_5, VAR_6, VAR_7;

    AVFrame *pic = VAR_0->coded_frame;

    const uint8_t *VAR_8 = VAR_3->VAR_1;

    uint16_t *y, *u, *v;



    if (s->custom_stride )

        VAR_6 = s->custom_stride;

    else {

        int VAR_9 = ((VAR_0->width + 47) / 48) * 48;

        VAR_6 = VAR_9 * 8 / 3;

    }



    VAR_7 = !((uintptr_t)VAR_8 & 0xf) && !(VAR_6 & 0xf);

    if (VAR_7 != s->VAR_7) {

        s->VAR_7 = VAR_7;

        if (HAVE_MMX)

            v210_x86_init(s);

    }



    if (pic->VAR_1[0])

        VAR_0->release_buffer(VAR_0, pic);



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

        av_log(VAR_0, AV_LOG_ERROR, "packet too small\n");

        return -1;

    }



    pic->reference = 0;

    if (VAR_0->get_buffer(VAR_0, pic) < 0)

        return -1;



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

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

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

    pic->pict_type = AV_PICTURE_TYPE_I;

    pic->key_frame = 1;



    for (VAR_4 = 0; VAR_4 < VAR_0->height; VAR_4++) {

        const uint32_t *src = (const uint32_t*)VAR_8;

        uint32_t val;



        VAR_5 = (VAR_0->width / 6) * 6;

        s->unpack_frame(src, y, u, v, VAR_5);



        y += VAR_5;

        u += VAR_5 >> 1;

        v += VAR_5 >> 1;

        src += (VAR_5 << 1) / 3;



        if (VAR_5 < VAR_0->width - 1) {

            READ_PIXELS(u, y, v);



            val  = av_le2ne32(*src++);

            *y++ =  val & 0x3FF;

        }

        if (VAR_5 < VAR_0->width - 3) {

            *u++ = (val >> 10) & 0x3FF;

            *y++ = (val >> 20) & 0x3FF;



            val  = av_le2ne32(*src++);

            *v++ =  val & 0x3FF;

            *y++ = (val >> 10) & 0x3FF;

        }



        VAR_8 += VAR_6;

        y += pic->linesize[0] / 2 - VAR_0->width;

        u += pic->linesize[1] / 2 - VAR_0->width / 2;

        v += pic->linesize[2] / 2 - VAR_0->width / 2;

    }



    *VAR_2 = sizeof(AVFrame);

    *(AVFrame*)VAR_1 = *VAR_0->coded_frame;



    return VAR_3->size;

}

static int FUNC_0(AVCodecContext *VAR_0, void *VAR_1, int *VAR_2,
AVPacket *VAR_3)
{ V210DecContext *s = VAR_0->priv_data; int VAR_4, VAR_5, VAR_6, VAR_7; AVFrame *pic = VAR_0->coded_frame; const uint8_t *VAR_8 = VAR_3->VAR_1; uint16_t *y, *u, *v; if (s->custom_stride )
VAR_6 = s->custom_stride; else { int VAR_9 = ((VAR_0->width + 47) / 48) * 48; VAR_6 = VAR_9 * 8 / 3; } VAR_7 = !((uintptr_t)VAR_8 & 0xf) && !(VAR_6 & 0xf); if (VAR_7 != s->VAR_7) { s->VAR_7 = VAR_7; if (HAVE_MMX)
v210_x86_init(s); } if (pic->VAR_1[0])
VAR_0->release_buffer(VAR_0, pic); if (VAR_3->size < VAR_6 * VAR_0->height) { av_log(VAR_0, AV_LOG_ERROR, "packet too small\n"); return -1; } pic->reference = 0; if (VAR_0->get_buffer(VAR_0, pic) < 0)
return -1; y = (uint16_t*)pic->VAR_1[0]; u = (uint16_t*)pic->VAR_1[1]; v = (uint16_t*)pic->VAR_1[2]; pic->pict_type = AV_PICTURE_TYPE_I; pic->key_frame = 1; for (VAR_4 = 0; VAR_4 < VAR_0->height; VAR_4++) { const uint32_t *src = (const uint32_t*)VAR_8; uint32_t val; VAR_5 = (VAR_0->width / 6) * 6; s->unpack_frame(src, y, u, v, VAR_5); y += VAR_5; u += VAR_5 >> 1; v += VAR_5 >> 1; src += (VAR_5 << 1) / 3; if (VAR_5 < VAR_0->width - 1) { READ_PIXELS(u, y, v); val  = av_le2ne32(*src++); *y++ =  val & 0x3FF; } if (VAR_5 < VAR_0->width - 3) { *u++ = (val >> 10) & 0x3FF; *y++ = (val >> 20) & 0x3FF; val  = av_le2ne32(*src++); *v++ =  val & 0x3FF; *y++ = (val >> 10) & 0x3FF; } VAR_8 += VAR_6; y += pic->linesize[0] / 2 - VAR_0->width; u += pic->linesize[1] / 2 - VAR_0->width / 2; v += pic->linesize[2] / 2 - VAR_0->width / 2; } *VAR_2 = sizeof(AVFrame); *(AVFrame*)VAR_1 = *VAR_0->coded_frame; return VAR_3->size; }