Actually this breaks lossless mode, made the following 2 changes locally: -fix lossless mode -set default slice sizes to 32x16 (greater quality and speed) --- libavcodec/vc2enc.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/libavcodec/vc2enc.c b/libavcodec/vc2enc.c index addc5d4..9ff867d 100644 --- a/libavcodec/vc2enc.c +++ b/libavcodec/vc2enc.c @@ -687,7 +687,7 @@ static int calc_slice_sizes(VC2EncContext *s) { SliceArgs *enc_args = s->slice_args; SliceArgs **tmp = &s->slice_ratings[s->num_x*s->num_y]; - int i, slice_x, slice_y, bytes_left = 0; + int i, slice_x, s_q_avg = 0, slice_y, bytes_left = 0; int median_ener = 0, total_bytes_needed = 0; int best = s->num_x*s->num_y/5; @@ -715,6 +715,7 @@ static int calc_slice_sizes(VC2EncContext *s) SliceArgs *args = &enc_args[i]; s->slice_ratings[i] = args; bytes_left += s->slice_max_bytes - args->bytes; + s_q_avg = (s_q_avg + args->quant_idx)/2; median_ener = (median_ener + args->hh_ener)/2; } @@ -725,7 +726,7 @@ static int calc_slice_sizes(VC2EncContext *s) SliceArgs *h = s->slice_ratings[s->num_x*s->num_y - i - 1]; int h_step, h_n_idx, h_bits, h_bytes, h_needs; - if (l_pos <= 0 && bytes_left <= 0) + if (!s_q_avg || (l_pos <= 0 && bytes_left <= 0)) break; h_step = ff_log2(FFABS(h->hh_ener - median_ener)); @@ -1257,8 +1258,8 @@ alloc_fail: #define VC2ENC_FLAGS (AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM) static const AVOption vc2enc_options[] = { {"tolerance", "Max undershoot in percent", offsetof(VC2EncContext, tolerance), AV_OPT_TYPE_DOUBLE, {.dbl = 5.0f}, 0.0f, 45.0f, VC2ENC_FLAGS, "tolerance"}, - {"slice_width", "Slice width", offsetof(VC2EncContext, slice_width), AV_OPT_TYPE_INT, {.i64 = 64}, 32, 1024, VC2ENC_FLAGS, "slice_width"}, - {"slice_height", "Slice height", offsetof(VC2EncContext, slice_height), AV_OPT_TYPE_INT, {.i64 = 32}, 8, 1024, VC2ENC_FLAGS, "slice_height"}, + {"slice_width", "Slice width", offsetof(VC2EncContext, slice_width), AV_OPT_TYPE_INT, {.i64 = 32}, 32, 1024, VC2ENC_FLAGS, "slice_width"}, + {"slice_height", "Slice height", offsetof(VC2EncContext, slice_height), AV_OPT_TYPE_INT, {.i64 = 16}, 8, 1024, VC2ENC_FLAGS, "slice_height"}, {"wavelet_depth", "Transform depth", offsetof(VC2EncContext, wavelet_depth), AV_OPT_TYPE_INT, {.i64 = 4}, 1, 5, VC2ENC_FLAGS, "wavelet_depth"}, {"wavelet_type", "Transform type", offsetof(VC2EncContext, wavelet_idx), AV_OPT_TYPE_INT, {.i64 = VC2_TRANSFORM_9_7}, 0, VC2_TRANSFORMS_NB, VC2ENC_FLAGS, "wavelet_idx"}, {"9_7", "Deslauriers-Dubuc (9,7)", 0, AV_OPT_TYPE_CONST, {.i64 = VC2_TRANSFORM_9_7}, INT_MIN, INT_MAX, VC2ENC_FLAGS, "wavelet_idx"}, -- 2.8.0.rc3 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel