Split initialization of SequenceHeader The initializations of seq_params are split from cpi initializations and now happen while creating ppi. Change-Id: I7286b8e6ed812e50e5590ab03e4082a24ec2b2c6
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c index ca36d03..0787c49 100644 --- a/av1/av1_cx_iface.c +++ b/av1/av1_cx_iface.c
@@ -1328,16 +1328,19 @@ set_encoder_config(&ctx->oxcf, &ctx->cfg, &ctx->extra_cfg); // On profile change, request a key frame force_key |= ctx->ppi->seq_params.profile != ctx->oxcf.profile; + bool is_sb_size_changed = false; + av1_change_config_seq(ctx->ppi, &ctx->oxcf, &is_sb_size_changed); #if CONFIG_FRAME_PARALLEL_ENCODE int i; for (i = 0; i < ctx->ppi->num_fp_contexts; i++) { - av1_change_config(ctx->ppi->parallel_cpi[i], &ctx->oxcf); + av1_change_config(ctx->ppi->parallel_cpi[i], &ctx->oxcf, + is_sb_size_changed); } #else - av1_change_config(ctx->ppi->cpi, &ctx->oxcf); + av1_change_config(ctx->ppi->cpi, &ctx->oxcf, is_sb_size_changed); #endif // CONFIG_FRAME_PARALLEL_ENCODE if (ctx->ppi->cpi_lap != NULL) { - av1_change_config(ctx->ppi->cpi_lap, &ctx->oxcf); + av1_change_config(ctx->ppi->cpi_lap, &ctx->oxcf, is_sb_size_changed); } } @@ -1380,16 +1383,19 @@ if (res == AOM_CODEC_OK) { ctx->extra_cfg = *extra_cfg; set_encoder_config(&ctx->oxcf, &ctx->cfg, &ctx->extra_cfg); + bool is_sb_size_changed = false; + av1_change_config_seq(ctx->ppi, &ctx->oxcf, &is_sb_size_changed); #if CONFIG_FRAME_PARALLEL_ENCODE int i; for (i = 0; i < ctx->ppi->num_fp_contexts; i++) { - av1_change_config(ctx->ppi->parallel_cpi[i], &ctx->oxcf); + av1_change_config(ctx->ppi->parallel_cpi[i], &ctx->oxcf, + is_sb_size_changed); } #else - av1_change_config(ctx->ppi->cpi, &ctx->oxcf); + av1_change_config(ctx->ppi->cpi, &ctx->oxcf, is_sb_size_changed); #endif // CONFIG_FRAME_PARALLEL_ENCODE if (ctx->ppi->cpi_lap != NULL) { - av1_change_config(ctx->ppi->cpi_lap, &ctx->oxcf); + av1_change_config(ctx->ppi->cpi_lap, &ctx->oxcf, is_sb_size_changed); } } return res; @@ -2621,7 +2627,6 @@ if (status != AOM_CODEC_OK) { aom_internal_error(&ppi->error, AOM_CODEC_ERROR, NULL); } - cpi_lap->ppi->seq_params_locked = 1; } lib_flags = 0; frame_size = 0; @@ -2917,7 +2922,7 @@ const int number_spatial_layers = va_arg(args, int); if (number_spatial_layers > MAX_NUM_SPATIAL_LAYERS) return AOM_CODEC_INVALID_PARAM; - ctx->ppi->cpi->common.number_spatial_layers = number_spatial_layers; + ctx->ppi->number_spatial_layers = number_spatial_layers; return AOM_CODEC_OK; } @@ -2933,19 +2938,20 @@ static aom_codec_err_t ctrl_set_svc_params(aom_codec_alg_priv_t *ctx, va_list args) { - AV1_COMP *const cpi = ctx->ppi->cpi; + AV1_PRIMARY *const ppi = ctx->ppi; + AV1_COMP *const cpi = ppi->cpi; AV1_COMMON *const cm = &cpi->common; aom_svc_params_t *const params = va_arg(args, aom_svc_params_t *); - cm->number_spatial_layers = params->number_spatial_layers; - cm->number_temporal_layers = params->number_temporal_layers; + ppi->number_spatial_layers = params->number_spatial_layers; + ppi->number_temporal_layers = params->number_temporal_layers; cpi->svc.number_spatial_layers = params->number_spatial_layers; cpi->svc.number_temporal_layers = params->number_temporal_layers; - if (cm->number_spatial_layers > 1 || cm->number_temporal_layers > 1) { + if (ppi->number_spatial_layers > 1 || ppi->number_temporal_layers > 1) { unsigned int sl, tl; ctx->ppi->use_svc = 1; - for (sl = 0; sl < cm->number_spatial_layers; ++sl) { - for (tl = 0; tl < cm->number_temporal_layers; ++tl) { - const int layer = LAYER_IDS_TO_IDX(sl, tl, cm->number_temporal_layers); + for (sl = 0; sl < ppi->number_spatial_layers; ++sl) { + for (tl = 0; tl < ppi->number_temporal_layers; ++tl) { + const int layer = LAYER_IDS_TO_IDX(sl, tl, ppi->number_temporal_layers); LAYER_CONTEXT *lc = &cpi->svc.layer_context[layer]; lc->max_q = params->max_quantizers[layer]; lc->min_q = params->min_quantizers[layer]; @@ -2957,10 +2963,10 @@ } if (cm->current_frame.frame_number == 0) { if (!cpi->ppi->seq_params_locked) { - SequenceHeader *const seq_params = cm->seq_params; + SequenceHeader *const seq_params = &ppi->seq_params; seq_params->operating_points_cnt_minus_1 = - cm->number_spatial_layers * cm->number_temporal_layers - 1; - av1_init_seq_coding_tools(cpi->ppi, cm, &cpi->oxcf, 1); + ppi->number_spatial_layers * ppi->number_temporal_layers - 1; + av1_init_seq_coding_tools(ppi, &cpi->oxcf, 1); } av1_init_layer_context(cpi); }
diff --git a/av1/common/av1_common_int.h b/av1/common/av1_common_int.h index 3019cb3..b6109e2 100644 --- a/av1/common/av1_common_int.h +++ b/av1/common/av1_common_int.h
@@ -1030,20 +1030,12 @@ int8_t ref_frame_side[REF_FRAMES]; /*! - * Number of temporal layers: may be > 1 for SVC (scalable vector coding). - */ - unsigned int number_temporal_layers; - /*! * Temporal layer ID of this frame * (in the range 0 ... (number_temporal_layers - 1)). */ int temporal_layer_id; /*! - * Number of spatial layers: may be > 1 for SVC (scalable vector coding). - */ - unsigned int number_spatial_layers; - /*! * Spatial layer ID of this frame * (in the range 0 ... (number_spatial_layers - 1)). */
diff --git a/av1/decoder/decoder.h b/av1/decoder/decoder.h index 5c53545..226b9dc 100644 --- a/av1/decoder/decoder.h +++ b/av1/decoder/decoder.h
@@ -350,6 +350,16 @@ * Code and details about current error status. */ struct aom_internal_error_info error; + + /*! + * Number of temporal layers: may be > 1 for SVC (scalable vector coding). + */ + unsigned int number_temporal_layers; + + /*! + * Number of spatial layers: may be > 1 for SVC (scalable vector coding). + */ + unsigned int number_spatial_layers; } AV1Decoder; // Returns 0 on success. Sets pbi->common.error.error_code to a nonzero error
diff --git a/av1/decoder/obu.c b/av1/decoder/obu.c index bc4bcb4..6c80148 100644 --- a/av1/decoder/obu.c +++ b/av1/decoder/obu.c
@@ -232,8 +232,8 @@ pbi->current_operating_point = seq_params->operating_point_idc[operating_point]; if (aom_get_num_layers_from_operating_point_idc( - pbi->current_operating_point, &cm->number_spatial_layers, - &cm->number_temporal_layers) != AOM_CODEC_OK) { + pbi->current_operating_point, &pbi->number_spatial_layers, + &pbi->number_temporal_layers) != AOM_CODEC_OK) { pbi->error.error_code = AOM_CODEC_ERROR; return 0; }
diff --git a/av1/encoder/encode_strategy.c b/av1/encoder/encode_strategy.c index 296acbf..238a27d 100644 --- a/av1/encoder/encode_strategy.c +++ b/av1/encoder/encode_strategy.c
@@ -1236,14 +1236,14 @@ #if CONFIG_REALTIME_ONLY av1_get_one_pass_rt_params(cpi, &frame_params, *frame_flags); - if (cpi->oxcf.speed >= 5 && cm->number_spatial_layers == 1 && - cm->number_temporal_layers == 1) + if (cpi->oxcf.speed >= 5 && cpi->ppi->number_spatial_layers == 1 && + cpi->ppi->number_temporal_layers == 1) av1_set_reference_structure_one_pass_rt(cpi, cpi->gf_frame_index == 0); #else if (use_one_pass_rt_params) { av1_get_one_pass_rt_params(cpi, &frame_params, *frame_flags); - if (cpi->oxcf.speed >= 5 && cm->number_spatial_layers == 1 && - cm->number_temporal_layers == 1) + if (cpi->oxcf.speed >= 5 && cpi->ppi->number_spatial_layers == 1 && + cpi->ppi->number_temporal_layers == 1) av1_set_reference_structure_one_pass_rt(cpi, cpi->gf_frame_index == 0); } #endif
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c index 532db67..4a2ba8d 100644 --- a/av1/encoder/encoder.c +++ b/av1/encoder/encoder.c
@@ -391,7 +391,7 @@ } } -void av1_init_seq_coding_tools(AV1_PRIMARY *const ppi, AV1_COMMON *cm, +void av1_init_seq_coding_tools(AV1_PRIMARY *const ppi, const AV1EncoderConfig *oxcf, int use_svc) { SequenceHeader *const seq = &ppi->seq_params; const FrameDimensionCfg *const frm_dim_cfg = &oxcf->frm_dim_cfg; @@ -463,26 +463,27 @@ // skip decoding enhancement layers (temporal first). int i = 0; assert(seq->operating_points_cnt_minus_1 == - (int)(cm->number_spatial_layers * cm->number_temporal_layers - 1)); - for (unsigned int sl = 0; sl < cm->number_spatial_layers; sl++) { - for (unsigned int tl = 0; tl < cm->number_temporal_layers; tl++) { + (int)(ppi->number_spatial_layers * ppi->number_temporal_layers - 1)); + for (unsigned int sl = 0; sl < ppi->number_spatial_layers; sl++) { + for (unsigned int tl = 0; tl < ppi->number_temporal_layers; tl++) { seq->operating_point_idc[i] = - (~(~0u << (cm->number_spatial_layers - sl)) << 8) | - ~(~0u << (cm->number_temporal_layers - tl)); + (~(~0u << (ppi->number_spatial_layers - sl)) << 8) | + ~(~0u << (ppi->number_temporal_layers - tl)); i++; } } } } -static void init_config(struct AV1_COMP *cpi, AV1EncoderConfig *oxcf) { - AV1_COMMON *const cm = &cpi->common; - SequenceHeader *const seq_params = cm->seq_params; - ResizePendingParams *resize_pending_params = &cpi->resize_pending_params; +static void init_config_sequence(struct AV1_PRIMARY *ppi, + AV1EncoderConfig *oxcf) { + SequenceHeader *const seq_params = &ppi->seq_params; const DecoderModelCfg *const dec_model_cfg = &oxcf->dec_model_cfg; const ColorCfg *const color_cfg = &oxcf->color_cfg; - cpi->oxcf = *oxcf; - cpi->framerate = oxcf->input_cfg.init_framerate; + + ppi->use_svc = 0; + ppi->number_spatial_layers = 1; + ppi->number_temporal_layers = 1; seq_params->profile = oxcf->profile; seq_params->bit_depth = oxcf->tool_cfg.bit_depth; @@ -510,7 +511,7 @@ // set the decoder model parameters in schedule mode seq_params->decoder_model_info.num_units_in_decoding_tick = dec_model_cfg->num_units_in_decoding_tick; - cpi->ppi->buffer_removal_time_present = 1; + ppi->buffer_removal_time_present = 1; av1_set_aom_dec_model_info(&seq_params->decoder_model_info); av1_set_dec_model_op_parameters(&seq_params->op_params[0]); } else if (seq_params->timing_info_present && @@ -548,12 +549,18 @@ } } } + av1_change_config_seq(ppi, oxcf, NULL); +} + +static void init_config(struct AV1_COMP *cpi, AV1EncoderConfig *oxcf) { + AV1_COMMON *const cm = &cpi->common; + ResizePendingParams *resize_pending_params = &cpi->resize_pending_params; + + cpi->oxcf = *oxcf; + cpi->framerate = oxcf->input_cfg.init_framerate; cm->width = oxcf->frm_dim_cfg.width; cm->height = oxcf->frm_dim_cfg.height; - // set sb size before allocations - set_sb_size(seq_params, av1_select_sb_size(&cpi->oxcf, cm->width, cm->height, - cpi->svc.number_spatial_layers)); alloc_compressor_data(cpi); av1_update_film_grain_parameters(cpi, oxcf); @@ -562,18 +569,15 @@ cpi->td.counts = &cpi->counts; // Set init SVC parameters. - cpi->ppi->use_svc = 0; cpi->svc.set_ref_frame_config = 0; cpi->svc.non_reference_frame = 0; cpi->svc.number_spatial_layers = 1; cpi->svc.number_temporal_layers = 1; - cm->number_spatial_layers = 1; - cm->number_temporal_layers = 1; cm->spatial_layer_id = 0; cm->temporal_layer_id = 0; // change includes all joint functionality - av1_change_config(cpi, oxcf); + av1_change_config(cpi, oxcf, true); cpi->ref_frame_flags = 0; @@ -586,26 +590,13 @@ av1_noise_estimate_init(&cpi->noise_estimate, cm->width, cm->height); } -void av1_change_config(struct AV1_COMP *cpi, const AV1EncoderConfig *oxcf) { - AV1_COMMON *const cm = &cpi->common; - SequenceHeader *const seq_params = cm->seq_params; - RATE_CONTROL *const rc = &cpi->rc; - PRIMARY_RATE_CONTROL *const p_rc = &cpi->ppi->p_rc; - MACROBLOCK *const x = &cpi->td.mb; - AV1LevelParams *const level_params = &cpi->ppi->level_params; - InitialDimensions *const initial_dimensions = &cpi->initial_dimensions; - RefreshFrameFlagsInfo *const refresh_frame_flags = &cpi->refresh_frame; - const FrameDimensionCfg *const frm_dim_cfg = &cpi->oxcf.frm_dim_cfg; +void av1_change_config_seq(struct AV1_PRIMARY *ppi, + const AV1EncoderConfig *oxcf, + bool *is_sb_size_changed) { + SequenceHeader *const seq_params = &ppi->seq_params; + const FrameDimensionCfg *const frm_dim_cfg = &oxcf->frm_dim_cfg; const DecoderModelCfg *const dec_model_cfg = &oxcf->dec_model_cfg; const ColorCfg *const color_cfg = &oxcf->color_cfg; - const RateControlCfg *const rc_cfg = &oxcf->rc_cfg; - // in case of LAP, lag in frames is set according to number of lap buffers - // calculated at init time. This stores and restores LAP's lag in frames to - // prevent override by new cfg. - int lap_lag_in_frames = -1; - if (cpi->ppi->lap_enabled && cpi->compressor_stage == LAP_STAGE) { - lap_lag_in_frames = cpi->oxcf.gf_cfg.lag_in_frames; - } if (seq_params->profile != oxcf->profile) seq_params->profile = oxcf->profile; seq_params->bit_depth = oxcf->tool_cfg.bit_depth; @@ -636,7 +627,7 @@ // set the decoder model parameters in schedule mode seq_params->decoder_model_info.num_units_in_decoding_tick = dec_model_cfg->num_units_in_decoding_tick; - cpi->ppi->buffer_removal_time_present = 1; + ppi->buffer_removal_time_present = 1; av1_set_aom_dec_model_info(&seq_params->decoder_model_info); av1_set_dec_model_op_parameters(&seq_params->op_params[0]); } else if (seq_params->timing_info_present && @@ -649,6 +640,52 @@ 10; // Default value (not signaled) } + av1_update_film_grain_parameters_seq(ppi, oxcf); + + int sb_size = seq_params->sb_size; + // Superblock size should not be updated after the first key frame. + if (!ppi->seq_params_locked) { + set_sb_size(seq_params, av1_select_sb_size(oxcf, frm_dim_cfg->width, + frm_dim_cfg->height, + ppi->number_spatial_layers)); + for (int i = 0; i < MAX_NUM_OPERATING_POINTS; ++i) + seq_params->tier[i] = (oxcf->tier_mask >> i) & 1; + } + if (is_sb_size_changed != NULL && sb_size != seq_params->sb_size) + *is_sb_size_changed = true; + + // Init sequence level coding tools + // This should not be called after the first key frame. + if (!ppi->seq_params_locked) { + seq_params->operating_points_cnt_minus_1 = + (ppi->number_spatial_layers > 1 || ppi->number_temporal_layers > 1) + ? ppi->number_spatial_layers * ppi->number_temporal_layers - 1 + : 0; + av1_init_seq_coding_tools(ppi, oxcf, ppi->use_svc); + } +} + +void av1_change_config(struct AV1_COMP *cpi, const AV1EncoderConfig *oxcf, + bool is_sb_size_changed) { + AV1_COMMON *const cm = &cpi->common; + SequenceHeader *const seq_params = cm->seq_params; + RATE_CONTROL *const rc = &cpi->rc; + PRIMARY_RATE_CONTROL *const p_rc = &cpi->ppi->p_rc; + MACROBLOCK *const x = &cpi->td.mb; + AV1LevelParams *const level_params = &cpi->ppi->level_params; + InitialDimensions *const initial_dimensions = &cpi->initial_dimensions; + RefreshFrameFlagsInfo *const refresh_frame_flags = &cpi->refresh_frame; + const FrameDimensionCfg *const frm_dim_cfg = &cpi->oxcf.frm_dim_cfg; + const RateControlCfg *const rc_cfg = &oxcf->rc_cfg; + + // in case of LAP, lag in frames is set according to number of lap buffers + // calculated at init time. This stores and restores LAP's lag in frames to + // prevent override by new cfg. + int lap_lag_in_frames = -1; + if (cpi->ppi->lap_enabled && cpi->compressor_stage == LAP_STAGE) { + lap_lag_in_frames = cpi->oxcf.gf_cfg.lag_in_frames; + } + av1_update_film_grain_parameters(cpi, oxcf); cpi->oxcf = *oxcf; @@ -763,21 +800,9 @@ cm->width = frm_dim_cfg->width; cm->height = frm_dim_cfg->height; - int sb_size = seq_params->sb_size; - // Superblock size should not be updated after the first key frame. - if (!cpi->ppi->seq_params_locked) { - set_sb_size( - cm->seq_params, - av1_select_sb_size(oxcf, frm_dim_cfg->width, frm_dim_cfg->height, - cpi->svc.number_spatial_layers)); - for (int i = 0; i < MAX_NUM_OPERATING_POINTS; ++i) - seq_params->tier[i] = (oxcf->tier_mask >> i) & 1; - } - - if (initial_dimensions->width || sb_size != seq_params->sb_size) { + if (initial_dimensions->width || is_sb_size_changed) { if (cm->width > initial_dimensions->width || - cm->height > initial_dimensions->height || - seq_params->sb_size != sb_size) { + cm->height > initial_dimensions->height || is_sb_size_changed) { av1_free_context_buffers(cm); av1_free_shared_coeff_buffer(&cpi->td.shared_coeff_buf); av1_free_sms_tree(&cpi->td); @@ -802,16 +827,6 @@ highbd_set_var_fns(cpi); #endif - // Init sequence level coding tools - // This should not be called after the first key frame. - if (!cpi->ppi->seq_params_locked) { - seq_params->operating_points_cnt_minus_1 = - (cm->number_spatial_layers > 1 || cm->number_temporal_layers > 1) - ? cm->number_spatial_layers * cm->number_temporal_layers - 1 - : 0; - av1_init_seq_coding_tools(cpi->ppi, cm, oxcf, cpi->ppi->use_svc); - } - if (cpi->ppi->use_svc) av1_update_layer_context_change_config(cpi, rc_cfg->target_bandwidth); @@ -876,6 +891,8 @@ ppi->num_fp_contexts = 1; #endif + init_config_sequence(ppi, oxcf); + av1_primary_rc_init(oxcf, &ppi->p_rc); // For two pass and lag_in_frames > 33 in LAP. @@ -3745,7 +3762,7 @@ aom_bitstream_queue_set_frame_write(cm->current_frame.order_hint * 2 + cm->show_frame); #endif - if (cpi->ppi->use_svc && cm->number_spatial_layers > 1) { + if (cpi->ppi->use_svc && cpi->ppi->number_spatial_layers > 1) { av1_one_pass_cbr_svc_start_layer(cpi); }
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index 9db41a7..eda0905 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -2195,6 +2195,16 @@ bool buffer_removal_time_present; /*! + * Number of temporal layers: may be > 1 for SVC (scalable vector coding). + */ + unsigned int number_temporal_layers; + + /*! + * Number of spatial layers: may be > 1 for SVC (scalable vector coding). + */ + unsigned int number_spatial_layers; + + /*! * Code and details about current error status. */ struct aom_internal_error_info error; @@ -2873,12 +2883,16 @@ void av1_remove_primary_compressor(AV1_PRIMARY *ppi); -void av1_change_config(AV1_COMP *cpi, const AV1EncoderConfig *oxcf); +void av1_change_config_seq(AV1_PRIMARY *ppi, const AV1EncoderConfig *oxcf, + bool *sb_size_changed); + +void av1_change_config(AV1_COMP *cpi, const AV1EncoderConfig *oxcf, + bool sb_size_changed); void av1_check_initial_width(AV1_COMP *cpi, int use_highbitdepth, int subsampling_x, int subsampling_y); -void av1_init_seq_coding_tools(AV1_PRIMARY *const ppi, AV1_COMMON *cm, +void av1_init_seq_coding_tools(AV1_PRIMARY *const ppi, const AV1EncoderConfig *oxcf, int use_svc); /*!\endcond */
diff --git a/av1/encoder/encoder_utils.c b/av1/encoder/encoder_utils.c index c8932c2..33131de 100644 --- a/av1/encoder/encoder_utils.c +++ b/av1/encoder/encoder_utils.c
@@ -565,6 +565,23 @@ memset(pars->ar_coeffs_cb, 0, sizeof(pars->ar_coeffs_cb)); } +void av1_update_film_grain_parameters_seq(struct AV1_PRIMARY *ppi, + const AV1EncoderConfig *oxcf) { + SequenceHeader *const seq_params = &ppi->seq_params; + const TuneCfg *const tune_cfg = &oxcf->tune_cfg; + + if (tune_cfg->film_grain_test_vector || tune_cfg->film_grain_table_filename || + tune_cfg->content == AOM_CONTENT_FILM) { + seq_params->film_grain_params_present = 1; + } else { +#if CONFIG_DENOISE + seq_params->film_grain_params_present = (oxcf->noise_level > 0); +#else + seq_params->film_grain_params_present = 0; +#endif + } +} + void av1_update_film_grain_parameters(struct AV1_COMP *cpi, const AV1EncoderConfig *oxcf) { AV1_COMMON *const cm = &cpi->common; @@ -578,7 +595,6 @@ } if (tune_cfg->film_grain_test_vector) { - cm->seq_params->film_grain_params_present = 1; if (cm->current_frame.frame_type == KEY_FRAME) { memcpy(&cm->film_grain_params, film_grain_test_vectors + tune_cfg->film_grain_test_vector - 1, @@ -591,26 +607,18 @@ } } } else if (tune_cfg->film_grain_table_filename) { - cm->seq_params->film_grain_params_present = 1; - cpi->film_grain_table = aom_malloc(sizeof(*cpi->film_grain_table)); memset(cpi->film_grain_table, 0, sizeof(aom_film_grain_table_t)); aom_film_grain_table_read(cpi->film_grain_table, tune_cfg->film_grain_table_filename, cm->error); } else if (tune_cfg->content == AOM_CONTENT_FILM) { - cm->seq_params->film_grain_params_present = 1; cm->film_grain_params.bit_depth = cm->seq_params->bit_depth; if (oxcf->tool_cfg.enable_monochrome) reset_film_grain_chroma_params(&cm->film_grain_params); if (cm->seq_params->color_range == AOM_CR_FULL_RANGE) cm->film_grain_params.clip_to_restricted_range = 0; } else { -#if CONFIG_DENOISE - cm->seq_params->film_grain_params_present = (cpi->oxcf.noise_level > 0); -#else - cm->seq_params->film_grain_params_present = 0; -#endif memset(&cm->film_grain_params, 0, sizeof(cm->film_grain_params)); } }
diff --git a/av1/encoder/encoder_utils.h b/av1/encoder/encoder_utils.h index 0159a38..98a8e6c 100644 --- a/av1/encoder/encoder_utils.h +++ b/av1/encoder/encoder_utils.h
@@ -973,6 +973,8 @@ } } +void av1_update_film_grain_parameters_seq(struct AV1_PRIMARY *ppi, + const AV1EncoderConfig *oxcf); void av1_update_film_grain_parameters(struct AV1_COMP *cpi, const AV1EncoderConfig *oxcf);