static int ulti_decode_frame(AVCodecContext *avctx,

                             void *data, int *data_size,

                             AVPacket *avpkt)

{

    const uint8_t *buf = avpkt->data;

    int buf_size = avpkt->size;

    UltimotionDecodeContext *s=avctx->priv_data;

    int modifier = 0;

    int uniq = 0;

    int mode = 0;

    int blocks = 0;

    int done = 0;

    int x = 0, y = 0;

    int i;

    int skip;

    int tmp;



    s->frame.reference = 1;

    s->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;

    if (avctx->reget_buffer(avctx, &s->frame) < 0) {

        av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");

        return -1;

    }



    while(!done) {

        int idx;

        if(blocks >= s->blocks || y >= s->height)

            break;//all blocks decoded



        idx = *buf++;

        if((idx & 0xF8) == 0x70) {

            switch(idx) {

            case 0x70: //change modifier

                modifier = *buf++;

                if(modifier>1)

                    av_log(avctx, AV_LOG_INFO, "warning: modifier must be 0 or 1, got %i\n", modifier);

                break;

            case 0x71: // set uniq flag

                uniq = 1;

                break;

            case 0x72: //toggle mode

                mode = !mode;

                break;

            case 0x73: //end-of-frame

                done = 1;

                break;

            case 0x74: //skip some blocks

                skip = *buf++;

                if ((blocks + skip) >= s->blocks)

                    break;

                blocks += skip;

                x += skip * 8;

                while(x >= s->width) {

                    x -= s->width;

                    y += 8;

                }

                break;

            default:

                av_log(avctx, AV_LOG_INFO, "warning: unknown escape 0x%02X\n", idx);

            }

        } else { //handle one block

            int code;

            int cf;

            int angle = 0;

            uint8_t Y[4]; // luma samples of block

            int tx = 0, ty = 0; //coords of subblock

            int chroma = 0;

            if (mode || uniq) {

                uniq = 0;

                cf = 1;

                chroma = 0;

            } else {

                cf = 0;

                if (idx)

                    chroma = *buf++;

            }

            for (i = 0; i < 4; i++) { // for every subblock

                code = (idx >> (6 - i*2)) & 3; //extract 2 bits

                if(!code) //skip subblock

                    continue;

                if(cf)

                    chroma = *buf++;

                tx = x + block_coords[i * 2];

                ty = y + block_coords[(i * 2) + 1];

                switch(code) {

                case 1:

                    tmp = *buf++;



                    angle = angle_by_index[(tmp >> 6) & 0x3];



                    Y[0] = tmp & 0x3F;

                    Y[1] = Y[0];



                    if (angle) {

                        Y[2] = Y[0]+1;

                        if (Y[2] > 0x3F)

                            Y[2] = 0x3F;

                        Y[3] = Y[2];

                    } else {

                        Y[2] = Y[0];

                        Y[3] = Y[0];

                    }

                    break;



                case 2:

                    if (modifier) { // unpack four luma samples

                        tmp = bytestream_get_be24(&buf);



                        Y[0] = (tmp >> 18) & 0x3F;

                        Y[1] = (tmp >> 12) & 0x3F;

                        Y[2] = (tmp >> 6) & 0x3F;

                        Y[3] = tmp & 0x3F;

                        angle = 16;

                    } else { // retrieve luma samples from codebook

                        tmp = bytestream_get_be16(&buf);



                        angle = (tmp >> 12) & 0xF;

                        tmp &= 0xFFF;

                        tmp <<= 2;

                        Y[0] = s->ulti_codebook[tmp];

                        Y[1] = s->ulti_codebook[tmp + 1];

                        Y[2] = s->ulti_codebook[tmp + 2];

                        Y[3] = s->ulti_codebook[tmp + 3];

                    }

                    break;



                case 3:

                    if (modifier) { // all 16 luma samples

                        uint8_t Luma[16];



                        tmp = bytestream_get_be24(&buf);

                        Luma[0] = (tmp >> 18) & 0x3F;

                        Luma[1] = (tmp >> 12) & 0x3F;

                        Luma[2] = (tmp >> 6) & 0x3F;

                        Luma[3] = tmp & 0x3F;



                        tmp = bytestream_get_be24(&buf);

                        Luma[4] = (tmp >> 18) & 0x3F;

                        Luma[5] = (tmp >> 12) & 0x3F;

                        Luma[6] = (tmp >> 6) & 0x3F;

                        Luma[7] = tmp & 0x3F;



                        tmp = bytestream_get_be24(&buf);

                        Luma[8] = (tmp >> 18) & 0x3F;

                        Luma[9] = (tmp >> 12) & 0x3F;

                        Luma[10] = (tmp >> 6) & 0x3F;

                        Luma[11] = tmp & 0x3F;



                        tmp = bytestream_get_be24(&buf);

                        Luma[12] = (tmp >> 18) & 0x3F;

                        Luma[13] = (tmp >> 12) & 0x3F;

                        Luma[14] = (tmp >> 6) & 0x3F;

                        Luma[15] = tmp & 0x3F;



                        ulti_convert_yuv(&s->frame, tx, ty, Luma, chroma);

                    } else {

                        tmp = *buf++;

                        if(tmp & 0x80) {

                            angle = (tmp >> 4) & 0x7;

                            tmp = (tmp << 8) + *buf++;

                            Y[0] = (tmp >> 6) & 0x3F;

                            Y[1] = tmp & 0x3F;

                            Y[2] = (*buf++) & 0x3F;

                            Y[3] = (*buf++) & 0x3F;

                            ulti_grad(&s->frame, tx, ty, Y, chroma, angle); //draw block

                        } else { // some patterns

                            int f0, f1;

                            f0 = *buf++;

                            f1 = tmp;

                            Y[0] = (*buf++) & 0x3F;

                            Y[1] = (*buf++) & 0x3F;

                            ulti_pattern(&s->frame, tx, ty, f1, f0, Y[0], Y[1], chroma);

                        }

                    }

                    break;

                }

                if(code != 3)

                    ulti_grad(&s->frame, tx, ty, Y, chroma, angle); // draw block

            }

            blocks++;

                x += 8;

            if(x >= s->width) {

                x = 0;

                y += 8;

            }

        }

    }



    *data_size=sizeof(AVFrame);

    *(AVFrame*)data= s->frame;



    return buf_size;

}

static int ulti_decode_frame(AVCodecContext *avctx,

                             void *data, int *data_size,

                             AVPacket *avpkt)

{

    const uint8_t *buf = avpkt->data;

    int buf_size = avpkt->size;

    UltimotionDecodeContext *s=avctx->priv_data;

    int modifier = 0;

    int uniq = 0;

    int mode = 0;

    int blocks = 0;

    int done = 0;

    int x = 0, y = 0;

    int i;

    int skip;

    int tmp;



    s->frame.reference = 1;

    s->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;

    if (avctx->reget_buffer(avctx, &s->frame) < 0) {

        av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");

        return -1;

    }



    while(!done) {

        int idx;

        if(blocks >= s->blocks || y >= s->height)

            break;



        idx = *buf++;

        if((idx & 0xF8) == 0x70) {

            switch(idx) {

            case 0x70: 

                modifier = *buf++;

                if(modifier>1)

                    av_log(avctx, AV_LOG_INFO, "warning: modifier must be 0 or 1, got %i\n", modifier);

                break;

            case 0x71: 

                uniq = 1;

                break;

            case 0x72: 

                mode = !mode;

                break;

            case 0x73: 

                done = 1;

                break;

            case 0x74: 

                skip = *buf++;

                if ((blocks + skip) >= s->blocks)

                    break;

                blocks += skip;

                x += skip * 8;

                while(x >= s->width) {

                    x -= s->width;

                    y += 8;

                }

                break;

            default:

                av_log(avctx, AV_LOG_INFO, "warning: unknown escape 0x%02X\n", idx);

            }

        } else { 

            int code;

            int cf;

            int angle = 0;

            uint8_t Y[4]; 

            int tx = 0, ty = 0; 

            int chroma = 0;

            if (mode || uniq) {

                uniq = 0;

                cf = 1;

                chroma = 0;

            } else {

                cf = 0;

                if (idx)

                    chroma = *buf++;

            }

            for (i = 0; i < 4; i++) { 

                code = (idx >> (6 - i*2)) & 3; 

                if(!code) 

                    continue;

                if(cf)

                    chroma = *buf++;

                tx = x + block_coords[i * 2];

                ty = y + block_coords[(i * 2) + 1];

                switch(code) {

                case 1:

                    tmp = *buf++;



                    angle = angle_by_index[(tmp >> 6) & 0x3];



                    Y[0] = tmp & 0x3F;

                    Y[1] = Y[0];



                    if (angle) {

                        Y[2] = Y[0]+1;

                        if (Y[2] > 0x3F)

                            Y[2] = 0x3F;

                        Y[3] = Y[2];

                    } else {

                        Y[2] = Y[0];

                        Y[3] = Y[0];

                    }

                    break;



                case 2:

                    if (modifier) { 

                        tmp = bytestream_get_be24(&buf);



                        Y[0] = (tmp >> 18) & 0x3F;

                        Y[1] = (tmp >> 12) & 0x3F;

                        Y[2] = (tmp >> 6) & 0x3F;

                        Y[3] = tmp & 0x3F;

                        angle = 16;

                    } else { 

                        tmp = bytestream_get_be16(&buf);



                        angle = (tmp >> 12) & 0xF;

                        tmp &= 0xFFF;

                        tmp <<= 2;

                        Y[0] = s->ulti_codebook[tmp];

                        Y[1] = s->ulti_codebook[tmp + 1];

                        Y[2] = s->ulti_codebook[tmp + 2];

                        Y[3] = s->ulti_codebook[tmp + 3];

                    }

                    break;



                case 3:

                    if (modifier) { 

                        uint8_t Luma[16];



                        tmp = bytestream_get_be24(&buf);

                        Luma[0] = (tmp >> 18) & 0x3F;

                        Luma[1] = (tmp >> 12) & 0x3F;

                        Luma[2] = (tmp >> 6) & 0x3F;

                        Luma[3] = tmp & 0x3F;



                        tmp = bytestream_get_be24(&buf);

                        Luma[4] = (tmp >> 18) & 0x3F;

                        Luma[5] = (tmp >> 12) & 0x3F;

                        Luma[6] = (tmp >> 6) & 0x3F;

                        Luma[7] = tmp & 0x3F;



                        tmp = bytestream_get_be24(&buf);

                        Luma[8] = (tmp >> 18) & 0x3F;

                        Luma[9] = (tmp >> 12) & 0x3F;

                        Luma[10] = (tmp >> 6) & 0x3F;

                        Luma[11] = tmp & 0x3F;



                        tmp = bytestream_get_be24(&buf);

                        Luma[12] = (tmp >> 18) & 0x3F;

                        Luma[13] = (tmp >> 12) & 0x3F;

                        Luma[14] = (tmp >> 6) & 0x3F;

                        Luma[15] = tmp & 0x3F;



                        ulti_convert_yuv(&s->frame, tx, ty, Luma, chroma);

                    } else {

                        tmp = *buf++;

                        if(tmp & 0x80) {

                            angle = (tmp >> 4) & 0x7;

                            tmp = (tmp << 8) + *buf++;

                            Y[0] = (tmp >> 6) & 0x3F;

                            Y[1] = tmp & 0x3F;

                            Y[2] = (*buf++) & 0x3F;

                            Y[3] = (*buf++) & 0x3F;

                            ulti_grad(&s->frame, tx, ty, Y, chroma, angle); 

                        } else { 

                            int f0, f1;

                            f0 = *buf++;

                            f1 = tmp;

                            Y[0] = (*buf++) & 0x3F;

                            Y[1] = (*buf++) & 0x3F;

                            ulti_pattern(&s->frame, tx, ty, f1, f0, Y[0], Y[1], chroma);

                        }

                    }

                    break;

                }

                if(code != 3)

                    ulti_grad(&s->frame, tx, ty, Y, chroma, angle); 

            }

            blocks++;

                x += 8;

            if(x >= s->width) {

                x = 0;

                y += 8;

            }

        }

    }



    *data_size=sizeof(AVFrame);

    *(AVFrame*)data= s->frame;



    return buf_size;

}

                if (idx)                 if(cf)
static int FUNC_0(AVCodecContext *VAR_0,

                             void *VAR_1, int *VAR_2,

                             AVPacket *VAR_3)

{

    const uint8_t *VAR_4 = VAR_3->VAR_1;

    int VAR_5 = VAR_3->size;

    UltimotionDecodeContext *s=VAR_0->priv_data;

    int VAR_6 = 0;

    int VAR_7 = 0;

    int VAR_8 = 0;

    int VAR_9 = 0;

    int VAR_10 = 0;

    int VAR_11 = 0, VAR_12 = 0;

    int VAR_13;

    int VAR_14;

    int VAR_15;



    s->frame.reference = 1;

    s->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;

    if (VAR_0->reget_buffer(VAR_0, &s->frame) < 0) {

        av_log(VAR_0, AV_LOG_ERROR, "reget_buffer() failed\n");

        return -1;

    }



    while(!VAR_10) {

        int VAR_16;

        if(VAR_9 >= s->VAR_9 || VAR_12 >= s->height)

            break;



        VAR_16 = *VAR_4++;

        if((VAR_16 & 0xF8) == 0x70) {

            switch(VAR_16) {

            case 0x70: 

                VAR_6 = *VAR_4++;

                if(VAR_6>1)

                    av_log(VAR_0, AV_LOG_INFO, "warning: VAR_6 must be 0 or 1, got %VAR_13\n", VAR_6);

                break;

            case 0x71: 

                VAR_7 = 1;

                break;

            case 0x72: 

                VAR_8 = !VAR_8;

                break;

            case 0x73: 

                VAR_10 = 1;

                break;

            case 0x74: 

                VAR_14 = *VAR_4++;

                if ((VAR_9 + VAR_14) >= s->VAR_9)

                    break;

                VAR_9 += VAR_14;

                VAR_11 += VAR_14 * 8;

                while(VAR_11 >= s->width) {

                    VAR_11 -= s->width;

                    VAR_12 += 8;

                }

                break;

            default:

                av_log(VAR_0, AV_LOG_INFO, "warning: unknown escape 0x%02X\n", VAR_16);

            }

        } else { 

            int VAR_17;

            int VAR_18;

            int VAR_19 = 0;

            uint8_t Y[4]; 

            int VAR_20 = 0, VAR_21 = 0; 

            int VAR_22 = 0;

            if (VAR_8 || VAR_7) {

                VAR_7 = 0;

                VAR_18 = 1;

                VAR_22 = 0;

            } else {

                VAR_18 = 0;

                if (VAR_16)

                    VAR_22 = *VAR_4++;

            }

            for (VAR_13 = 0; VAR_13 < 4; VAR_13++) { 

                VAR_17 = (VAR_16 >> (6 - VAR_13*2)) & 3; 

                if(!VAR_17) 

                    continue;

                if(VAR_18)

                    VAR_22 = *VAR_4++;

                VAR_20 = VAR_11 + block_coords[VAR_13 * 2];

                VAR_21 = VAR_12 + block_coords[(VAR_13 * 2) + 1];

                switch(VAR_17) {

                case 1:

                    VAR_15 = *VAR_4++;



                    VAR_19 = angle_by_index[(VAR_15 >> 6) & 0x3];



                    Y[0] = VAR_15 & 0x3F;

                    Y[1] = Y[0];



                    if (VAR_19) {

                        Y[2] = Y[0]+1;

                        if (Y[2] > 0x3F)

                            Y[2] = 0x3F;

                        Y[3] = Y[2];

                    } else {

                        Y[2] = Y[0];

                        Y[3] = Y[0];

                    }

                    break;



                case 2:

                    if (VAR_6) { 

                        VAR_15 = bytestream_get_be24(&VAR_4);



                        Y[0] = (VAR_15 >> 18) & 0x3F;

                        Y[1] = (VAR_15 >> 12) & 0x3F;

                        Y[2] = (VAR_15 >> 6) & 0x3F;

                        Y[3] = VAR_15 & 0x3F;

                        VAR_19 = 16;

                    } else { 

                        VAR_15 = bytestream_get_be16(&VAR_4);



                        VAR_19 = (VAR_15 >> 12) & 0xF;

                        VAR_15 &= 0xFFF;

                        VAR_15 <<= 2;

                        Y[0] = s->ulti_codebook[VAR_15];

                        Y[1] = s->ulti_codebook[VAR_15 + 1];

                        Y[2] = s->ulti_codebook[VAR_15 + 2];

                        Y[3] = s->ulti_codebook[VAR_15 + 3];

                    }

                    break;



                case 3:

                    if (VAR_6) { 

                        uint8_t Luma[16];



                        VAR_15 = bytestream_get_be24(&VAR_4);

                        Luma[0] = (VAR_15 >> 18) & 0x3F;

                        Luma[1] = (VAR_15 >> 12) & 0x3F;

                        Luma[2] = (VAR_15 >> 6) & 0x3F;

                        Luma[3] = VAR_15 & 0x3F;



                        VAR_15 = bytestream_get_be24(&VAR_4);

                        Luma[4] = (VAR_15 >> 18) & 0x3F;

                        Luma[5] = (VAR_15 >> 12) & 0x3F;

                        Luma[6] = (VAR_15 >> 6) & 0x3F;

                        Luma[7] = VAR_15 & 0x3F;



                        VAR_15 = bytestream_get_be24(&VAR_4);

                        Luma[8] = (VAR_15 >> 18) & 0x3F;

                        Luma[9] = (VAR_15 >> 12) & 0x3F;

                        Luma[10] = (VAR_15 >> 6) & 0x3F;

                        Luma[11] = VAR_15 & 0x3F;



                        VAR_15 = bytestream_get_be24(&VAR_4);

                        Luma[12] = (VAR_15 >> 18) & 0x3F;

                        Luma[13] = (VAR_15 >> 12) & 0x3F;

                        Luma[14] = (VAR_15 >> 6) & 0x3F;

                        Luma[15] = VAR_15 & 0x3F;



                        ulti_convert_yuv(&s->frame, VAR_20, VAR_21, Luma, VAR_22);

                    } else {

                        VAR_15 = *VAR_4++;

                        if(VAR_15 & 0x80) {

                            VAR_19 = (VAR_15 >> 4) & 0x7;

                            VAR_15 = (VAR_15 << 8) + *VAR_4++;

                            Y[0] = (VAR_15 >> 6) & 0x3F;

                            Y[1] = VAR_15 & 0x3F;

                            Y[2] = (*VAR_4++) & 0x3F;

                            Y[3] = (*VAR_4++) & 0x3F;

                            ulti_grad(&s->frame, VAR_20, VAR_21, Y, VAR_22, VAR_19); 

                        } else { 

                            int VAR_23, VAR_24;

                            VAR_23 = *VAR_4++;

                            VAR_24 = VAR_15;

                            Y[0] = (*VAR_4++) & 0x3F;

                            Y[1] = (*VAR_4++) & 0x3F;

                            ulti_pattern(&s->frame, VAR_20, VAR_21, VAR_24, VAR_23, Y[0], Y[1], VAR_22);

                        }

                    }

                    break;

                }

                if(VAR_17 != 3)

                    ulti_grad(&s->frame, VAR_20, VAR_21, Y, VAR_22, VAR_19); 

            }

            VAR_9++;

                VAR_11 += 8;

            if(VAR_11 >= s->width) {

                VAR_11 = 0;

                VAR_12 += 8;

            }

        }

    }



    *VAR_2=sizeof(AVFrame);

    *(AVFrame*)VAR_1= s->frame;



    return VAR_5;

}

static int FUNC_0(AVCodecContext *VAR_0,
void *VAR_1, int *VAR_2,
AVPacket *VAR_3)
{ const uint8_t *VAR_4 = VAR_3->VAR_1; int VAR_5 = VAR_3->size; UltimotionDecodeContext *s=VAR_0->priv_data; int VAR_6 = 0; int VAR_7 = 0; int VAR_8 = 0; int VAR_9 = 0; int VAR_10 = 0; int VAR_11 = 0, VAR_12 = 0; int VAR_13; int VAR_14; int VAR_15; s->frame.reference = 1; s->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE; if (VAR_0->reget_buffer(VAR_0, &s->frame) < 0) { av_log(VAR_0, AV_LOG_ERROR, "reget_buffer() failed\n"); return -1; } while(!VAR_10) { int VAR_16; if(VAR_9 >= s->VAR_9 || VAR_12 >= s->height)
break; VAR_16 = *VAR_4++; if((VAR_16 & 0xF8) == 0x70) { switch(VAR_16) { case 0x70:
VAR_6 = *VAR_4++; if(VAR_6>1)
av_log(VAR_0, AV_LOG_INFO, "warning: VAR_6 must be 0 or 1, got %VAR_13\n", VAR_6); break; case 0x71:
VAR_7 = 1; break; case 0x72:
VAR_8 = !VAR_8; break; case 0x73:
VAR_10 = 1; break; case 0x74:
VAR_14 = *VAR_4++; if ((VAR_9 + VAR_14) >= s->VAR_9)
break; VAR_9 += VAR_14; VAR_11 += VAR_14 * 8; while(VAR_11 >= s->width) { VAR_11 -= s->width; VAR_12 += 8; } break; default:
av_log(VAR_0, AV_LOG_INFO, "warning: unknown escape 0x%02X\n", VAR_16); } } else { int VAR_17; int VAR_18; int VAR_19 = 0; uint8_t Y[4]; int VAR_20 = 0, VAR_21 = 0; int VAR_22 = 0; if (VAR_8 || VAR_7) { VAR_7 = 0; VAR_18 = 1; VAR_22 = 0; } else { VAR_18 = 0; if (VAR_16)
VAR_22 = *VAR_4++; } for (VAR_13 = 0; VAR_13 < 4; VAR_13++) { VAR_17 = (VAR_16 >> (6 - VAR_13*2)) & 3; if(!VAR_17)
continue; if(VAR_18)
VAR_22 = *VAR_4++; VAR_20 = VAR_11 + block_coords[VAR_13 * 2]; VAR_21 = VAR_12 + block_coords[(VAR_13 * 2) + 1]; switch(VAR_17) { case 1:
VAR_15 = *VAR_4++; VAR_19 = angle_by_index[(VAR_15 >> 6) & 0x3]; Y[0] = VAR_15 & 0x3F; Y[1] = Y[0]; if (VAR_19) { Y[2] = Y[0]+1; if (Y[2] > 0x3F)
Y[2] = 0x3F; Y[3] = Y[2]; } else { Y[2] = Y[0]; Y[3] = Y[0]; } break; case 2:
if (VAR_6) { VAR_15 = bytestream_get_be24(&VAR_4); Y[0] = (VAR_15 >> 18) & 0x3F; Y[1] = (VAR_15 >> 12) & 0x3F; Y[2] = (VAR_15 >> 6) & 0x3F; Y[3] = VAR_15 & 0x3F; VAR_19 = 16; } else { VAR_15 = bytestream_get_be16(&VAR_4); VAR_19 = (VAR_15 >> 12) & 0xF; VAR_15 &= 0xFFF; VAR_15 <<= 2; Y[0] = s->ulti_codebook[VAR_15]; Y[1] = s->ulti_codebook[VAR_15 + 1]; Y[2] = s->ulti_codebook[VAR_15 + 2]; Y[3] = s->ulti_codebook[VAR_15 + 3]; } break; case 3:
if (VAR_6) { uint8_t Luma[16]; VAR_15 = bytestream_get_be24(&VAR_4); Luma[0] = (VAR_15 >> 18) & 0x3F; Luma[1] = (VAR_15 >> 12) & 0x3F; Luma[2] = (VAR_15 >> 6) & 0x3F; Luma[3] = VAR_15 & 0x3F; VAR_15 = bytestream_get_be24(&VAR_4); Luma[4] = (VAR_15 >> 18) & 0x3F; Luma[5] = (VAR_15 >> 12) & 0x3F; Luma[6] = (VAR_15 >> 6) & 0x3F; Luma[7] = VAR_15 & 0x3F; VAR_15 = bytestream_get_be24(&VAR_4); Luma[8] = (VAR_15 >> 18) & 0x3F; Luma[9] = (VAR_15 >> 12) & 0x3F; Luma[10] = (VAR_15 >> 6) & 0x3F; Luma[11] = VAR_15 & 0x3F; VAR_15 = bytestream_get_be24(&VAR_4); Luma[12] = (VAR_15 >> 18) & 0x3F; Luma[13] = (VAR_15 >> 12) & 0x3F; Luma[14] = (VAR_15 >> 6) & 0x3F; Luma[15] = VAR_15 & 0x3F; ulti_convert_yuv(&s->frame, VAR_20, VAR_21, Luma, VAR_22); } else { VAR_15 = *VAR_4++; if(VAR_15 & 0x80) { VAR_19 = (VAR_15 >> 4) & 0x7; VAR_15 = (VAR_15 << 8) + *VAR_4++; Y[0] = (VAR_15 >> 6) & 0x3F; Y[1] = VAR_15 & 0x3F; Y[2] = (*VAR_4++) & 0x3F; Y[3] = (*VAR_4++) & 0x3F; ulti_grad(&s->frame, VAR_20, VAR_21, Y, VAR_22, VAR_19); } else { int VAR_23, VAR_24; VAR_23 = *VAR_4++; VAR_24 = VAR_15; Y[0] = (*VAR_4++) & 0x3F; Y[1] = (*VAR_4++) & 0x3F; ulti_pattern(&s->frame, VAR_20, VAR_21, VAR_24, VAR_23, Y[0], Y[1], VAR_22); } } break; } if(VAR_17 != 3)
ulti_grad(&s->frame, VAR_20, VAR_21, Y, VAR_22, VAR_19); } VAR_9++; VAR_11 += 8; if(VAR_11 >= s->width) { VAR_11 = 0; VAR_12 += 8; } } } *VAR_2=sizeof(AVFrame); *(AVFrame*)VAR_1= s->frame; return VAR_5; }