|
|
|
@@ -132,7 +132,7 @@ typedef struct VC2EncContext { |
|
|
|
int slice_max_bytes; |
|
|
|
int slice_min_bytes; |
|
|
|
int q_ceil; |
|
|
|
int q_start; |
|
|
|
int q_avg; |
|
|
|
|
|
|
|
/* Options */ |
|
|
|
double tolerance; |
|
|
|
@@ -675,7 +675,7 @@ static int rate_control(AVCodecContext *avctx, void *arg) |
|
|
|
const int sx = slice_dat->x; |
|
|
|
const int sy = slice_dat->y; |
|
|
|
int bits_last = INT_MAX, quant_buf[2] = {-1, -1}; |
|
|
|
int quant = s->q_start, range = s->q_start/3; |
|
|
|
int quant = slice_dat->quant_idx, range = quant/5; |
|
|
|
const int top = slice_dat->bits_ceil; |
|
|
|
const int bottom = slice_dat->bits_floor; |
|
|
|
int bits = count_hq_slice(s, slice_dat->cache, &slice_dat->cached_results, |
|
|
|
@@ -791,7 +791,7 @@ static int encode_slices(VC2EncContext *s) |
|
|
|
for (slice_x = 0; slice_x < s->num_x; slice_x++) { |
|
|
|
SliceArgs *args = &enc_args[s->num_x*slice_y + slice_x]; |
|
|
|
init_put_bits(&args->pb, buf + skip, args->bytes); |
|
|
|
s->q_start = (s->q_start + args->quant_idx)/2; |
|
|
|
s->q_avg = (s->q_avg + args->quant_idx)/2; |
|
|
|
skip += args->bytes; |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -839,8 +839,6 @@ static int encode_slices(VC2EncContext *s) |
|
|
|
* of levels. The rest of the areas can be thought as the details needed |
|
|
|
* to restore the image perfectly to its original size. |
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
static int dwt_plane(AVCodecContext *avctx, void *arg) |
|
|
|
{ |
|
|
|
TransformArgs *transform_dat = arg; |
|
|
|
@@ -996,7 +994,7 @@ static av_cold int vc2_encode_end(AVCodecContext *avctx) |
|
|
|
int i; |
|
|
|
VC2EncContext *s = avctx->priv_data; |
|
|
|
|
|
|
|
av_log(avctx, AV_LOG_INFO, "Qavg: %i\n", s->q_start); |
|
|
|
av_log(avctx, AV_LOG_INFO, "Qavg: %i\n", s->q_avg); |
|
|
|
|
|
|
|
for (i = 0; i < 3; i++) { |
|
|
|
ff_vc2enc_free_transforms(&s->transform_args[i].t); |
|
|
|
@@ -1031,6 +1029,8 @@ static av_cold int vc2_encode_init(AVCodecContext *avctx) |
|
|
|
s->base_vf = -1; |
|
|
|
s->strict_compliance = 1; |
|
|
|
|
|
|
|
s->q_avg = 0; |
|
|
|
|
|
|
|
/* Mark unknown as progressive */ |
|
|
|
s->interlaced = !((avctx->field_order == AV_FIELD_UNKNOWN) || |
|
|
|
(avctx->field_order == AV_FIELD_PROGRESSIVE)); |
|
|
|
|