static int dnxhd_decode_macroblock(DNXHDContext *ctx, AVFrame *frame,

                                   int x, int y)

{

    int shift1 = ctx->bit_depth == 10;

    int dct_linesize_luma   = frame->linesize[0];

    int dct_linesize_chroma = frame->linesize[1];

    uint8_t *dest_y, *dest_u, *dest_v;

    int dct_y_offset, dct_x_offset;

    int qscale, i;



    qscale = get_bits(&ctx->gb, 11);

    skip_bits1(&ctx->gb);



    if (qscale != ctx->last_qscale) {

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

            ctx->luma_scale[i]   = qscale * ctx->cid_table->luma_weight[i];

            ctx->chroma_scale[i] = qscale * ctx->cid_table->chroma_weight[i];

        }

        ctx->last_qscale = qscale;

    }



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

        ctx->bdsp.clear_block(ctx->blocks[i]);

        ctx->decode_dct_block(ctx, ctx->blocks[i], i, qscale);

    }

    if (ctx->is_444) {

        for (; i < 12; i++) {

            ctx->bdsp.clear_block(ctx->blocks[i]);

            ctx->decode_dct_block(ctx, ctx->blocks[i], i, qscale);

        }

    }



    if (frame->interlaced_frame) {

        dct_linesize_luma   <<= 1;

        dct_linesize_chroma <<= 1;

    }



    dest_y = frame->data[0] + ((y * dct_linesize_luma)   << 4) + (x << (4 + shift1));

    dest_u = frame->data[1] + ((y * dct_linesize_chroma) << 4) + (x << (3 + shift1 + ctx->is_444));

    dest_v = frame->data[2] + ((y * dct_linesize_chroma) << 4) + (x << (3 + shift1 + ctx->is_444));



    if (ctx->cur_field) {

        dest_y += frame->linesize[0];

        dest_u += frame->linesize[1];

        dest_v += frame->linesize[2];

    }



    dct_y_offset = dct_linesize_luma << 3;

    dct_x_offset = 8 << shift1;

    if (!ctx->is_444) {

        ctx->idsp.idct_put(dest_y,                               dct_linesize_luma, ctx->blocks[0]);

        ctx->idsp.idct_put(dest_y + dct_x_offset,                dct_linesize_luma, ctx->blocks[1]);

        ctx->idsp.idct_put(dest_y + dct_y_offset,                dct_linesize_luma, ctx->blocks[4]);

        ctx->idsp.idct_put(dest_y + dct_y_offset + dct_x_offset, dct_linesize_luma, ctx->blocks[5]);



        if (!(ctx->avctx->flags & CODEC_FLAG_GRAY)) {

            dct_y_offset = dct_linesize_chroma << 3;

            ctx->idsp.idct_put(dest_u,                dct_linesize_chroma, ctx->blocks[2]);

            ctx->idsp.idct_put(dest_v,                dct_linesize_chroma, ctx->blocks[3]);

            ctx->idsp.idct_put(dest_u + dct_y_offset, dct_linesize_chroma, ctx->blocks[6]);

            ctx->idsp.idct_put(dest_v + dct_y_offset, dct_linesize_chroma, ctx->blocks[7]);

        }

    } else {

        ctx->idsp.idct_put(dest_y,                               dct_linesize_luma, ctx->blocks[0]);

        ctx->idsp.idct_put(dest_y + dct_x_offset,                dct_linesize_luma, ctx->blocks[1]);

        ctx->idsp.idct_put(dest_y + dct_y_offset,                dct_linesize_luma, ctx->blocks[6]);

        ctx->idsp.idct_put(dest_y + dct_y_offset + dct_x_offset, dct_linesize_luma, ctx->blocks[7]);



        if (!(ctx->avctx->flags & CODEC_FLAG_GRAY)) {

            dct_y_offset = dct_linesize_chroma << 3;

            ctx->idsp.idct_put(dest_u,                               dct_linesize_chroma, ctx->blocks[2]);

            ctx->idsp.idct_put(dest_u + dct_x_offset,                dct_linesize_chroma, ctx->blocks[3]);

            ctx->idsp.idct_put(dest_u + dct_y_offset,                dct_linesize_chroma, ctx->blocks[8]);

            ctx->idsp.idct_put(dest_u + dct_y_offset + dct_x_offset, dct_linesize_chroma, ctx->blocks[9]);

            ctx->idsp.idct_put(dest_v,                               dct_linesize_chroma, ctx->blocks[4]);

            ctx->idsp.idct_put(dest_v + dct_x_offset,                dct_linesize_chroma, ctx->blocks[5]);

            ctx->idsp.idct_put(dest_v + dct_y_offset,                dct_linesize_chroma, ctx->blocks[10]);

            ctx->idsp.idct_put(dest_v + dct_y_offset + dct_x_offset, dct_linesize_chroma, ctx->blocks[11]);

        }

    }



    return 0;

}

static int dnxhd_decode_macroblock(DNXHDContext *ctx, AVFrame *frame,

                                   int x, int y)

{

    int shift1 = ctx->bit_depth == 10;

    int dct_linesize_luma   = frame->linesize[0];

    int dct_linesize_chroma = frame->linesize[1];

    uint8_t *dest_y, *dest_u, *dest_v;

    int dct_y_offset, dct_x_offset;

    int qscale, i;



    qscale = get_bits(&ctx->gb, 11);

    skip_bits1(&ctx->gb);



    if (qscale != ctx->last_qscale) {

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

            ctx->luma_scale[i]   = qscale * ctx->cid_table->luma_weight[i];

            ctx->chroma_scale[i] = qscale * ctx->cid_table->chroma_weight[i];

        }

        ctx->last_qscale = qscale;

    }



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

        ctx->bdsp.clear_block(ctx->blocks[i]);

        ctx->decode_dct_block(ctx, ctx->blocks[i], i, qscale);

    }

    if (ctx->is_444) {

        for (; i < 12; i++) {

            ctx->bdsp.clear_block(ctx->blocks[i]);

            ctx->decode_dct_block(ctx, ctx->blocks[i], i, qscale);

        }

    }



    if (frame->interlaced_frame) {

        dct_linesize_luma   <<= 1;

        dct_linesize_chroma <<= 1;

    }



    dest_y = frame->data[0] + ((y * dct_linesize_luma)   << 4) + (x << (4 + shift1));

    dest_u = frame->data[1] + ((y * dct_linesize_chroma) << 4) + (x << (3 + shift1 + ctx->is_444));

    dest_v = frame->data[2] + ((y * dct_linesize_chroma) << 4) + (x << (3 + shift1 + ctx->is_444));



    if (ctx->cur_field) {

        dest_y += frame->linesize[0];

        dest_u += frame->linesize[1];

        dest_v += frame->linesize[2];

    }



    dct_y_offset = dct_linesize_luma << 3;

    dct_x_offset = 8 << shift1;

    if (!ctx->is_444) {

        ctx->idsp.idct_put(dest_y,                               dct_linesize_luma, ctx->blocks[0]);

        ctx->idsp.idct_put(dest_y + dct_x_offset,                dct_linesize_luma, ctx->blocks[1]);

        ctx->idsp.idct_put(dest_y + dct_y_offset,                dct_linesize_luma, ctx->blocks[4]);

        ctx->idsp.idct_put(dest_y + dct_y_offset + dct_x_offset, dct_linesize_luma, ctx->blocks[5]);



        if (!(ctx->avctx->flags & CODEC_FLAG_GRAY)) {

            dct_y_offset = dct_linesize_chroma << 3;

            ctx->idsp.idct_put(dest_u,                dct_linesize_chroma, ctx->blocks[2]);

            ctx->idsp.idct_put(dest_v,                dct_linesize_chroma, ctx->blocks[3]);

            ctx->idsp.idct_put(dest_u + dct_y_offset, dct_linesize_chroma, ctx->blocks[6]);

            ctx->idsp.idct_put(dest_v + dct_y_offset, dct_linesize_chroma, ctx->blocks[7]);

        }

    } else {

        ctx->idsp.idct_put(dest_y,                               dct_linesize_luma, ctx->blocks[0]);

        ctx->idsp.idct_put(dest_y + dct_x_offset,                dct_linesize_luma, ctx->blocks[1]);

        ctx->idsp.idct_put(dest_y + dct_y_offset,                dct_linesize_luma, ctx->blocks[6]);

        ctx->idsp.idct_put(dest_y + dct_y_offset + dct_x_offset, dct_linesize_luma, ctx->blocks[7]);



        if (!(ctx->avctx->flags & CODEC_FLAG_GRAY)) {

            dct_y_offset = dct_linesize_chroma << 3;

            ctx->idsp.idct_put(dest_u,                               dct_linesize_chroma, ctx->blocks[2]);

            ctx->idsp.idct_put(dest_u + dct_x_offset,                dct_linesize_chroma, ctx->blocks[3]);

            ctx->idsp.idct_put(dest_u + dct_y_offset,                dct_linesize_chroma, ctx->blocks[8]);

            ctx->idsp.idct_put(dest_u + dct_y_offset + dct_x_offset, dct_linesize_chroma, ctx->blocks[9]);

            ctx->idsp.idct_put(dest_v,                               dct_linesize_chroma, ctx->blocks[4]);

            ctx->idsp.idct_put(dest_v + dct_x_offset,                dct_linesize_chroma, ctx->blocks[5]);

            ctx->idsp.idct_put(dest_v + dct_y_offset,                dct_linesize_chroma, ctx->blocks[10]);

            ctx->idsp.idct_put(dest_v + dct_y_offset + dct_x_offset, dct_linesize_chroma, ctx->blocks[11]);

        }

    }



    return 0;

}

static int FUNC_0(DNXHDContext *VAR_0, AVFrame *VAR_1,

                                   int VAR_2, int VAR_3)

{

    int VAR_4 = VAR_0->bit_depth == 10;

    int VAR_5   = VAR_1->linesize[0];

    int VAR_6 = VAR_1->linesize[1];

    uint8_t *dest_y, *dest_u, *dest_v;

    int VAR_7, VAR_8;

    int VAR_9, VAR_10;



    VAR_9 = get_bits(&VAR_0->gb, 11);

    skip_bits1(&VAR_0->gb);



    if (VAR_9 != VAR_0->last_qscale) {

        for (VAR_10 = 0; VAR_10 < 64; VAR_10++) {

            VAR_0->luma_scale[VAR_10]   = VAR_9 * VAR_0->cid_table->luma_weight[VAR_10];

            VAR_0->chroma_scale[VAR_10] = VAR_9 * VAR_0->cid_table->chroma_weight[VAR_10];

        }

        VAR_0->last_qscale = VAR_9;

    }



    for (VAR_10 = 0; VAR_10 < 8; VAR_10++) {

        VAR_0->bdsp.clear_block(VAR_0->blocks[VAR_10]);

        VAR_0->decode_dct_block(VAR_0, VAR_0->blocks[VAR_10], VAR_10, VAR_9);

    }

    if (VAR_0->is_444) {

        for (; VAR_10 < 12; VAR_10++) {

            VAR_0->bdsp.clear_block(VAR_0->blocks[VAR_10]);

            VAR_0->decode_dct_block(VAR_0, VAR_0->blocks[VAR_10], VAR_10, VAR_9);

        }

    }



    if (VAR_1->interlaced_frame) {

        VAR_5   <<= 1;

        VAR_6 <<= 1;

    }



    dest_y = VAR_1->data[0] + ((VAR_3 * VAR_5)   << 4) + (VAR_2 << (4 + VAR_4));

    dest_u = VAR_1->data[1] + ((VAR_3 * VAR_6) << 4) + (VAR_2 << (3 + VAR_4 + VAR_0->is_444));

    dest_v = VAR_1->data[2] + ((VAR_3 * VAR_6) << 4) + (VAR_2 << (3 + VAR_4 + VAR_0->is_444));



    if (VAR_0->cur_field) {

        dest_y += VAR_1->linesize[0];

        dest_u += VAR_1->linesize[1];

        dest_v += VAR_1->linesize[2];

    }



    VAR_7 = VAR_5 << 3;

    VAR_8 = 8 << VAR_4;

    if (!VAR_0->is_444) {

        VAR_0->idsp.idct_put(dest_y,                               VAR_5, VAR_0->blocks[0]);

        VAR_0->idsp.idct_put(dest_y + VAR_8,                VAR_5, VAR_0->blocks[1]);

        VAR_0->idsp.idct_put(dest_y + VAR_7,                VAR_5, VAR_0->blocks[4]);

        VAR_0->idsp.idct_put(dest_y + VAR_7 + VAR_8, VAR_5, VAR_0->blocks[5]);



        if (!(VAR_0->avctx->flags & CODEC_FLAG_GRAY)) {

            VAR_7 = VAR_6 << 3;

            VAR_0->idsp.idct_put(dest_u,                VAR_6, VAR_0->blocks[2]);

            VAR_0->idsp.idct_put(dest_v,                VAR_6, VAR_0->blocks[3]);

            VAR_0->idsp.idct_put(dest_u + VAR_7, VAR_6, VAR_0->blocks[6]);

            VAR_0->idsp.idct_put(dest_v + VAR_7, VAR_6, VAR_0->blocks[7]);

        }

    } else {

        VAR_0->idsp.idct_put(dest_y,                               VAR_5, VAR_0->blocks[0]);

        VAR_0->idsp.idct_put(dest_y + VAR_8,                VAR_5, VAR_0->blocks[1]);

        VAR_0->idsp.idct_put(dest_y + VAR_7,                VAR_5, VAR_0->blocks[6]);

        VAR_0->idsp.idct_put(dest_y + VAR_7 + VAR_8, VAR_5, VAR_0->blocks[7]);



        if (!(VAR_0->avctx->flags & CODEC_FLAG_GRAY)) {

            VAR_7 = VAR_6 << 3;

            VAR_0->idsp.idct_put(dest_u,                               VAR_6, VAR_0->blocks[2]);

            VAR_0->idsp.idct_put(dest_u + VAR_8,                VAR_6, VAR_0->blocks[3]);

            VAR_0->idsp.idct_put(dest_u + VAR_7,                VAR_6, VAR_0->blocks[8]);

            VAR_0->idsp.idct_put(dest_u + VAR_7 + VAR_8, VAR_6, VAR_0->blocks[9]);

            VAR_0->idsp.idct_put(dest_v,                               VAR_6, VAR_0->blocks[4]);

            VAR_0->idsp.idct_put(dest_v + VAR_8,                VAR_6, VAR_0->blocks[5]);

            VAR_0->idsp.idct_put(dest_v + VAR_7,                VAR_6, VAR_0->blocks[10]);

            VAR_0->idsp.idct_put(dest_v + VAR_7 + VAR_8, VAR_6, VAR_0->blocks[11]);

        }

    }



    return 0;

}

static int FUNC_0(DNXHDContext *VAR_0, AVFrame *VAR_1,
int VAR_2, int VAR_3)
{ int VAR_4 = VAR_0->bit_depth == 10; int VAR_5   = VAR_1->linesize[0]; int VAR_6 = VAR_1->linesize[1]; uint8_t *dest_y, *dest_u, *dest_v; int VAR_7, VAR_8; int VAR_9, VAR_10; VAR_9 = get_bits(&VAR_0->gb, 11); skip_bits1(&VAR_0->gb); if (VAR_9 != VAR_0->last_qscale) { for (VAR_10 = 0; VAR_10 < 64; VAR_10++) { VAR_0->luma_scale[VAR_10]   = VAR_9 * VAR_0->cid_table->luma_weight[VAR_10]; VAR_0->chroma_scale[VAR_10] = VAR_9 * VAR_0->cid_table->chroma_weight[VAR_10]; } VAR_0->last_qscale = VAR_9; } for (VAR_10 = 0; VAR_10 < 8; VAR_10++) { VAR_0->bdsp.clear_block(VAR_0->blocks[VAR_10]); VAR_0->decode_dct_block(VAR_0, VAR_0->blocks[VAR_10], VAR_10, VAR_9); } if (VAR_0->is_444) { for (; VAR_10 < 12; VAR_10++) { VAR_0->bdsp.clear_block(VAR_0->blocks[VAR_10]); VAR_0->decode_dct_block(VAR_0, VAR_0->blocks[VAR_10], VAR_10, VAR_9); } } if (VAR_1->interlaced_frame) { VAR_5   <<= 1; VAR_6 <<= 1; } dest_y = VAR_1->data[0] + ((VAR_3 * VAR_5)   << 4) + (VAR_2 << (4 + VAR_4)); dest_u = VAR_1->data[1] + ((VAR_3 * VAR_6) << 4) + (VAR_2 << (3 + VAR_4 + VAR_0->is_444)); dest_v = VAR_1->data[2] + ((VAR_3 * VAR_6) << 4) + (VAR_2 << (3 + VAR_4 + VAR_0->is_444)); if (VAR_0->cur_field) { dest_y += VAR_1->linesize[0]; dest_u += VAR_1->linesize[1]; dest_v += VAR_1->linesize[2]; } VAR_7 = VAR_5 << 3; VAR_8 = 8 << VAR_4; if (!VAR_0->is_444) { VAR_0->idsp.idct_put(dest_y,                               VAR_5, VAR_0->blocks[0]); VAR_0->idsp.idct_put(dest_y + VAR_8,                VAR_5, VAR_0->blocks[1]); VAR_0->idsp.idct_put(dest_y + VAR_7,                VAR_5, VAR_0->blocks[4]); VAR_0->idsp.idct_put(dest_y + VAR_7 + VAR_8, VAR_5, VAR_0->blocks[5]); if (!(VAR_0->avctx->flags & CODEC_FLAG_GRAY)) { VAR_7 = VAR_6 << 3; VAR_0->idsp.idct_put(dest_u,                VAR_6, VAR_0->blocks[2]); VAR_0->idsp.idct_put(dest_v,                VAR_6, VAR_0->blocks[3]); VAR_0->idsp.idct_put(dest_u + VAR_7, VAR_6, VAR_0->blocks[6]); VAR_0->idsp.idct_put(dest_v + VAR_7, VAR_6, VAR_0->blocks[7]); } } else { VAR_0->idsp.idct_put(dest_y,                               VAR_5, VAR_0->blocks[0]); VAR_0->idsp.idct_put(dest_y + VAR_8,                VAR_5, VAR_0->blocks[1]); VAR_0->idsp.idct_put(dest_y + VAR_7,                VAR_5, VAR_0->blocks[6]); VAR_0->idsp.idct_put(dest_y + VAR_7 + VAR_8, VAR_5, VAR_0->blocks[7]); if (!(VAR_0->avctx->flags & CODEC_FLAG_GRAY)) { VAR_7 = VAR_6 << 3; VAR_0->idsp.idct_put(dest_u,                               VAR_6, VAR_0->blocks[2]); VAR_0->idsp.idct_put(dest_u + VAR_8,                VAR_6, VAR_0->blocks[3]); VAR_0->idsp.idct_put(dest_u + VAR_7,                VAR_6, VAR_0->blocks[8]); VAR_0->idsp.idct_put(dest_u + VAR_7 + VAR_8, VAR_6, VAR_0->blocks[9]); VAR_0->idsp.idct_put(dest_v,                               VAR_6, VAR_0->blocks[4]); VAR_0->idsp.idct_put(dest_v + VAR_8,                VAR_6, VAR_0->blocks[5]); VAR_0->idsp.idct_put(dest_v + VAR_7,                VAR_6, VAR_0->blocks[10]); VAR_0->idsp.idct_put(dest_v + VAR_7 + VAR_8, VAR_6, VAR_0->blocks[11]); } } return 0; }