static int dnxhd_encode_fast(AVCodecContext *avctx, DNXHDEncContext *ctx)

{

    int max_bits = 0;

    int ret, x, y;

    if ((ret = dnxhd_find_qscale(ctx)) < 0)

        return ret;

    for (y = 0; y < ctx->m.mb_height; y++) {

        for (x = 0; x < ctx->m.mb_width; x++) {

            int mb = y * ctx->m.mb_width + x;

            int rc = (ctx->qscale * ctx->m.mb_num ) + mb;

            int delta_bits;

            ctx->mb_qscale[mb] = ctx->qscale;

            ctx->mb_bits[mb] = ctx->mb_rc[rc].bits;

            max_bits += ctx->mb_rc[rc].bits;

            if (!RC_VARIANCE) {

                delta_bits = ctx->mb_rc[rc].bits -

                             ctx->mb_rc[rc + ctx->m.mb_num].bits;

                ctx->mb_cmp[mb].mb = mb;

                ctx->mb_cmp[mb].value =

                    delta_bits ? ((ctx->mb_rc[rc].ssd -

                                   ctx->mb_rc[rc + ctx->m.mb_num].ssd) * 100) /

                                  delta_bits

                               : INT_MIN; // avoid increasing qscale

            }

        }

        max_bits += 31; // worst padding

    }

    if (!ret) {

        if (RC_VARIANCE)

            avctx->execute2(avctx, dnxhd_mb_var_thread,

                            NULL, NULL, ctx->m.mb_height);

        radix_sort(ctx->mb_cmp, ctx->m.mb_num);

        for (x = 0; x < ctx->m.mb_num && max_bits > ctx->frame_bits; x++) {

            int mb = ctx->mb_cmp[x].mb;

            int rc = (ctx->qscale * ctx->m.mb_num ) + mb;

            max_bits -= ctx->mb_rc[rc].bits -

                        ctx->mb_rc[rc + ctx->m.mb_num].bits;

            ctx->mb_qscale[mb] = ctx->qscale + 1;

            ctx->mb_bits[mb]   = ctx->mb_rc[rc + ctx->m.mb_num].bits;

        }

    }

    return 0;

}

static int dnxhd_encode_fast(AVCodecContext *avctx, DNXHDEncContext *ctx)

{

    int max_bits = 0;

    int ret, x, y;

    if ((ret = dnxhd_find_qscale(ctx)) < 0)

        return ret;

    for (y = 0; y < ctx->m.mb_height; y++) {

        for (x = 0; x < ctx->m.mb_width; x++) {

            int mb = y * ctx->m.mb_width + x;

            int rc = (ctx->qscale * ctx->m.mb_num ) + mb;

            int delta_bits;

            ctx->mb_qscale[mb] = ctx->qscale;

            ctx->mb_bits[mb] = ctx->mb_rc[rc].bits;

            max_bits += ctx->mb_rc[rc].bits;

            if (!RC_VARIANCE) {

                delta_bits = ctx->mb_rc[rc].bits -

                             ctx->mb_rc[rc + ctx->m.mb_num].bits;

                ctx->mb_cmp[mb].mb = mb;

                ctx->mb_cmp[mb].value =

                    delta_bits ? ((ctx->mb_rc[rc].ssd -

                                   ctx->mb_rc[rc + ctx->m.mb_num].ssd) * 100) /

                                  delta_bits

                               : INT_MIN; 

            }

        }

        max_bits += 31; 

    }

    if (!ret) {

        if (RC_VARIANCE)

            avctx->execute2(avctx, dnxhd_mb_var_thread,

                            NULL, NULL, ctx->m.mb_height);

        radix_sort(ctx->mb_cmp, ctx->m.mb_num);

        for (x = 0; x < ctx->m.mb_num && max_bits > ctx->frame_bits; x++) {

            int mb = ctx->mb_cmp[x].mb;

            int rc = (ctx->qscale * ctx->m.mb_num ) + mb;

            max_bits -= ctx->mb_rc[rc].bits -

                        ctx->mb_rc[rc + ctx->m.mb_num].bits;

            ctx->mb_qscale[mb] = ctx->qscale + 1;

            ctx->mb_bits[mb]   = ctx->mb_rc[rc + ctx->m.mb_num].bits;

        }

    }

    return 0;

}

static int FUNC_0(AVCodecContext *VAR_0, DNXHDEncContext *VAR_1)

{

    int VAR_2 = 0;

    int VAR_3, VAR_4, VAR_5;

    if ((VAR_3 = dnxhd_find_qscale(VAR_1)) < 0)

        return VAR_3;

    for (VAR_5 = 0; VAR_5 < VAR_1->m.mb_height; VAR_5++) {

        for (VAR_4 = 0; VAR_4 < VAR_1->m.mb_width; VAR_4++) {

            int mb = VAR_5 * VAR_1->m.mb_width + VAR_4;

            int rc = (VAR_1->qscale * VAR_1->m.mb_num ) + mb;

            int delta_bits;

            VAR_1->mb_qscale[mb] = VAR_1->qscale;

            VAR_1->mb_bits[mb] = VAR_1->mb_rc[rc].bits;

            VAR_2 += VAR_1->mb_rc[rc].bits;

            if (!RC_VARIANCE) {

                delta_bits = VAR_1->mb_rc[rc].bits -

                             VAR_1->mb_rc[rc + VAR_1->m.mb_num].bits;

                VAR_1->mb_cmp[mb].mb = mb;

                VAR_1->mb_cmp[mb].value =

                    delta_bits ? ((VAR_1->mb_rc[rc].ssd -

                                   VAR_1->mb_rc[rc + VAR_1->m.mb_num].ssd) * 100) /

                                  delta_bits

                               : INT_MIN; 

            }

        }

        VAR_2 += 31; 

    }

    if (!VAR_3) {

        if (RC_VARIANCE)

            VAR_0->execute2(VAR_0, dnxhd_mb_var_thread,

                            NULL, NULL, VAR_1->m.mb_height);

        radix_sort(VAR_1->mb_cmp, VAR_1->m.mb_num);

        for (VAR_4 = 0; VAR_4 < VAR_1->m.mb_num && VAR_2 > VAR_1->frame_bits; VAR_4++) {

            int mb = VAR_1->mb_cmp[VAR_4].mb;

            int rc = (VAR_1->qscale * VAR_1->m.mb_num ) + mb;

            VAR_2 -= VAR_1->mb_rc[rc].bits -

                        VAR_1->mb_rc[rc + VAR_1->m.mb_num].bits;

            VAR_1->mb_qscale[mb] = VAR_1->qscale + 1;

            VAR_1->mb_bits[mb]   = VAR_1->mb_rc[rc + VAR_1->m.mb_num].bits;

        }

    }

    return 0;

}

static int FUNC_0(AVCodecContext *VAR_0, DNXHDEncContext *VAR_1)
{ int VAR_2 = 0; int VAR_3, VAR_4, VAR_5; if ((VAR_3 = dnxhd_find_qscale(VAR_1)) < 0)
return VAR_3; for (VAR_5 = 0; VAR_5 < VAR_1->m.mb_height; VAR_5++) { for (VAR_4 = 0; VAR_4 < VAR_1->m.mb_width; VAR_4++) { int mb = VAR_5 * VAR_1->m.mb_width + VAR_4; int rc = (VAR_1->qscale * VAR_1->m.mb_num ) + mb; int delta_bits; VAR_1->mb_qscale[mb] = VAR_1->qscale; VAR_1->mb_bits[mb] = VAR_1->mb_rc[rc].bits; VAR_2 += VAR_1->mb_rc[rc].bits; if (!RC_VARIANCE) { delta_bits = VAR_1->mb_rc[rc].bits -
VAR_1->mb_rc[rc + VAR_1->m.mb_num].bits; VAR_1->mb_cmp[mb].mb = mb; VAR_1->mb_cmp[mb].value =
delta_bits ? ((VAR_1->mb_rc[rc].ssd -
VAR_1->mb_rc[rc + VAR_1->m.mb_num].ssd) * 100) /
delta_bits
: INT_MIN; } } VAR_2 += 31; } if (!VAR_3) { if (RC_VARIANCE)
VAR_0->execute2(VAR_0, dnxhd_mb_var_thread,
NULL, NULL, VAR_1->m.mb_height); radix_sort(VAR_1->mb_cmp, VAR_1->m.mb_num); for (VAR_4 = 0; VAR_4 < VAR_1->m.mb_num && VAR_2 > VAR_1->frame_bits; VAR_4++) { int mb = VAR_1->mb_cmp[VAR_4].mb; int rc = (VAR_1->qscale * VAR_1->m.mb_num ) + mb; VAR_2 -= VAR_1->mb_rc[rc].bits -
VAR_1->mb_rc[rc + VAR_1->m.mb_num].bits; VAR_1->mb_qscale[mb] = VAR_1->qscale + 1; VAR_1->mb_bits[mb]   = VAR_1->mb_rc[rc + VAR_1->m.mb_num].bits; } } return 0; }