mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-26 17:32:06 +00:00
mpegvideo_enc: add quantizer_noise_shaping private option.
Deprecate corresponding AVCodecContext field.
This commit is contained in:
parent
16b7557b79
commit
23bfcc066d
@ -1757,12 +1757,12 @@ typedef struct AVCodecContext {
|
||||
attribute_deprecated int inter_threshold;
|
||||
#endif
|
||||
|
||||
#if FF_API_MPV_GLOBAL_OPTS
|
||||
/**
|
||||
* quantizer noise shaping
|
||||
* - encoding: Set by user.
|
||||
* - decoding: unused
|
||||
* @deprecated use mpegvideo private options instead
|
||||
*/
|
||||
int quantizer_noise_shaping;
|
||||
attribute_deprecated int quantizer_noise_shaping;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Motion estimation threshold below which no motion estimation is
|
||||
|
@ -691,6 +691,7 @@ typedef struct MpegEncContext {
|
||||
void (*denoise_dct)(struct MpegEncContext *s, DCTELEM *block);
|
||||
|
||||
int mpv_flags; ///< flags set by private options
|
||||
int quantizer_noise_shaping;
|
||||
} MpegEncContext;
|
||||
|
||||
#define REBASE_PICTURE(pic, new_ctx, old_ctx) (pic ? \
|
||||
@ -715,7 +716,8 @@ typedef struct MpegEncContext {
|
||||
{ "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\
|
||||
FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
|
||||
{ "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\
|
||||
FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },
|
||||
FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
|
||||
{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },
|
||||
|
||||
extern const AVOption ff_mpv_generic_options[];
|
||||
|
||||
|
@ -630,6 +630,8 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx)
|
||||
s->mpv_flags |= FF_MPV_FLAG_SKIP_RD;
|
||||
if (avctx->flags2 & CODEC_FLAG2_STRICT_GOP)
|
||||
s->mpv_flags |= FF_MPV_FLAG_STRICT_GOP;
|
||||
if (avctx->quantizer_noise_shaping)
|
||||
s->quantizer_noise_shaping = avctx->quantizer_noise_shaping;
|
||||
#endif
|
||||
|
||||
switch (avctx->codec->id) {
|
||||
@ -1949,7 +1951,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s,
|
||||
}
|
||||
}
|
||||
|
||||
if (s->avctx->quantizer_noise_shaping) {
|
||||
if (s->quantizer_noise_shaping) {
|
||||
if (!skip_dct[0])
|
||||
get_visual_weight(weight[0], ptr_y , wrap_y);
|
||||
if (!skip_dct[1])
|
||||
@ -1990,7 +1992,7 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s,
|
||||
} else
|
||||
s->block_last_index[i] = -1;
|
||||
}
|
||||
if (s->avctx->quantizer_noise_shaping) {
|
||||
if (s->quantizer_noise_shaping) {
|
||||
for (i = 0; i < mb_block_count; i++) {
|
||||
if (!skip_dct[i]) {
|
||||
s->block_last_index[i] =
|
||||
@ -3738,7 +3740,7 @@ STOP_TIMER("init rem[]")
|
||||
#ifdef REFINE_STATS
|
||||
{START_TIMER
|
||||
#endif
|
||||
analyze_gradient = last_non_zero > 2 || s->avctx->quantizer_noise_shaping >= 3;
|
||||
analyze_gradient = last_non_zero > 2 || s->quantizer_noise_shaping >= 3;
|
||||
|
||||
if(analyze_gradient){
|
||||
#ifdef REFINE_STATS
|
||||
@ -3796,7 +3798,7 @@ STOP_TIMER("dct")}
|
||||
const int level= block[j];
|
||||
int change, old_coeff;
|
||||
|
||||
if(s->avctx->quantizer_noise_shaping < 3 && i > last_non_zero + 1)
|
||||
if(s->quantizer_noise_shaping < 3 && i > last_non_zero + 1)
|
||||
break;
|
||||
|
||||
if(level){
|
||||
@ -3814,7 +3816,7 @@ STOP_TIMER("dct")}
|
||||
int score, new_coeff, unquant_change;
|
||||
|
||||
score=0;
|
||||
if(s->avctx->quantizer_noise_shaping < 2 && FFABS(new_level) > FFABS(level))
|
||||
if(s->quantizer_noise_shaping < 2 && FFABS(new_level) > FFABS(level))
|
||||
continue;
|
||||
|
||||
if(new_level){
|
||||
|
@ -325,7 +325,9 @@ static const AVOption options[]={
|
||||
#endif
|
||||
{"flags2", NULL, OFFSET(flags2), AV_OPT_TYPE_FLAGS, {.dbl = DEFAULT}, 0, UINT_MAX, V|A|E|D, "flags2"},
|
||||
{"error", NULL, OFFSET(error_rate), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||
{"qns", "quantizer noise shaping", OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||
#if FF_API_MPV_GLOBAL_OPTS
|
||||
{"qns", "deprecated, use mpegvideo private options instead", OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||
#endif
|
||||
{"threads", NULL, OFFSET(thread_count), AV_OPT_TYPE_INT, {.dbl = 1 }, 0, INT_MAX, V|E|D, "threads"},
|
||||
{"auto", "detect a good number of threads", 0, AV_OPT_TYPE_CONST, {.dbl = 0 }, INT_MIN, INT_MAX, V|E|D, "threads"},
|
||||
{"me_threshold", "motion estimaton threshold", OFFSET(me_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||
|
Loading…
Reference in New Issue
Block a user