From aea80e227327da2f275e9fb14821eac2b57df930 Mon Sep 17 00:00:00 2001 From: James Almer Date: Wed, 25 Nov 2020 16:56:51 -0300 Subject: [PATCH] avcodec/cbs_av1: split film grain param fields into their own struct Cosmetic change in preparation for the following patches. Signed-off-by: James Almer --- libavcodec/cbs_av1.h | 62 +++++++++++++++------------- libavcodec/cbs_av1_syntax_template.c | 9 ++-- libavcodec/nvdec_av1.c | 59 +++++++++++++------------- libavcodec/vaapi_av1.c | 17 ++++---- 4 files changed, 77 insertions(+), 70 deletions(-) diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h index 386774750a..799470015c 100644 --- a/libavcodec/cbs_av1.h +++ b/libavcodec/cbs_av1.h @@ -130,6 +130,38 @@ typedef struct AV1RawSequenceHeader { uint8_t film_grain_params_present; } AV1RawSequenceHeader; +typedef struct AV1RawFilmGrainParams { + uint8_t apply_grain; + uint16_t grain_seed; + uint8_t update_grain; + uint8_t film_grain_params_ref_idx; + uint8_t num_y_points; + uint8_t point_y_value[14]; + uint8_t point_y_scaling[14]; + uint8_t chroma_scaling_from_luma; + uint8_t num_cb_points; + uint8_t point_cb_value[10]; + uint8_t point_cb_scaling[10]; + uint8_t num_cr_points; + uint8_t point_cr_value[10]; + uint8_t point_cr_scaling[10]; + uint8_t grain_scaling_minus_8; + uint8_t ar_coeff_lag; + uint8_t ar_coeffs_y_plus_128[24]; + uint8_t ar_coeffs_cb_plus_128[25]; + uint8_t ar_coeffs_cr_plus_128[25]; + uint8_t ar_coeff_shift_minus_6; + uint8_t grain_scale_shift; + uint8_t cb_mult; + uint8_t cb_luma_mult; + uint16_t cb_offset; + uint8_t cr_mult; + uint8_t cr_luma_mult; + uint16_t cr_offset; + uint8_t overlap_flag; + uint8_t clip_to_restricted_range; +} AV1RawFilmGrainParams; + typedef struct AV1RawFrameHeader { uint8_t show_existing_frame; uint8_t frame_to_show_map_idx; @@ -251,35 +283,7 @@ typedef struct AV1RawFrameHeader { //AV1RawSubexp gm_params[AV1_TOTAL_REFS_PER_FRAME][6]; uint32_t gm_params[AV1_TOTAL_REFS_PER_FRAME][6]; - uint8_t apply_grain; - uint16_t grain_seed; - uint8_t update_grain; - uint8_t film_grain_params_ref_idx; - uint8_t num_y_points; - uint8_t point_y_value[14]; - uint8_t point_y_scaling[14]; - uint8_t chroma_scaling_from_luma; - uint8_t num_cb_points; - uint8_t point_cb_value[10]; - uint8_t point_cb_scaling[10]; - uint8_t num_cr_points; - uint8_t point_cr_value[10]; - uint8_t point_cr_scaling[10]; - uint8_t grain_scaling_minus_8; - uint8_t ar_coeff_lag; - uint8_t ar_coeffs_y_plus_128[24]; - uint8_t ar_coeffs_cb_plus_128[25]; - uint8_t ar_coeffs_cr_plus_128[25]; - uint8_t ar_coeff_shift_minus_6; - uint8_t grain_scale_shift; - uint8_t cb_mult; - uint8_t cb_luma_mult; - uint16_t cb_offset; - uint8_t cr_mult; - uint8_t cr_luma_mult; - uint16_t cr_offset; - uint8_t overlap_flag; - uint8_t clip_to_restricted_range; + AV1RawFilmGrainParams film_grain; } AV1RawFrameHeader; typedef struct AV1RawTileData { diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c index f866dc7b2e..6fe6e9a4f3 100644 --- a/libavcodec/cbs_av1_syntax_template.c +++ b/libavcodec/cbs_av1_syntax_template.c @@ -1194,7 +1194,8 @@ static int FUNC(global_motion_params)(CodedBitstreamContext *ctx, RWContext *rw, } static int FUNC(film_grain_params)(CodedBitstreamContext *ctx, RWContext *rw, - AV1RawFrameHeader *current) + AV1RawFilmGrainParams *current, + AV1RawFrameHeader *frame_header) { CodedBitstreamAV1Context *priv = ctx->priv_data; const AV1RawSequenceHeader *seq = priv->sequence_header; @@ -1202,7 +1203,7 @@ static int FUNC(film_grain_params)(CodedBitstreamContext *ctx, RWContext *rw, int i, err; if (!seq->film_grain_params_present || - (!current->show_frame && !current->showable_frame)) + (!frame_header->show_frame && !frame_header->showable_frame)) return 0; flag(apply_grain); @@ -1212,7 +1213,7 @@ static int FUNC(film_grain_params)(CodedBitstreamContext *ctx, RWContext *rw, fb(16, grain_seed); - if (current->frame_type == AV1_FRAME_INTER) + if (frame_header->frame_type == AV1_FRAME_INTER) flag(update_grain); else infer(update_grain, 1); @@ -1635,7 +1636,7 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw, CHECK(FUNC(global_motion_params)(ctx, rw, current)); - CHECK(FUNC(film_grain_params)(ctx, rw, current)); + CHECK(FUNC(film_grain_params)(ctx, rw, ¤t->film_grain, current)); av_log(ctx->log_ctx, AV_LOG_DEBUG, "Frame %d: size %dx%d " "upscaled %d render %dx%d subsample %dx%d " diff --git a/libavcodec/nvdec_av1.c b/libavcodec/nvdec_av1.c index 9da1c840e3..1bac1fe26c 100644 --- a/libavcodec/nvdec_av1.c +++ b/libavcodec/nvdec_av1.c @@ -42,6 +42,7 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u const AV1DecContext *s = avctx->priv_data; const AV1RawSequenceHeader *seq = s->raw_seq; const AV1RawFrameHeader *frame_header = s->raw_frame_header; + const AV1RawFilmGrainParams *film_grain = &frame_header->film_grain; NVDECContext *ctx = avctx->internal->hwaccel_priv_data; CUVIDPICPARAMS *pp = &ctx->pic_params; @@ -54,7 +55,7 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u int ret, i, j; - ret = ff_nvdec_start_frame_sep_ref(avctx, cur_frame, frame_header->apply_grain); + ret = ff_nvdec_start_frame_sep_ref(avctx, cur_frame, film_grain->apply_grain); if (ret < 0) return ret; @@ -181,24 +182,24 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u .spatial_layer_id = s->cur_frame.spatial_id, /* Film Grain Params */ - .apply_grain = frame_header->apply_grain, - .overlap_flag = frame_header->overlap_flag, - .scaling_shift_minus8 = frame_header->grain_scaling_minus_8, - .chroma_scaling_from_luma = frame_header->chroma_scaling_from_luma, - .ar_coeff_lag = frame_header->ar_coeff_lag, - .ar_coeff_shift_minus6 = frame_header->ar_coeff_shift_minus_6, - .grain_scale_shift = frame_header->grain_scale_shift, - .clip_to_restricted_range = frame_header->clip_to_restricted_range, - .num_y_points = frame_header->num_y_points, - .num_cb_points = frame_header->num_cb_points, - .num_cr_points = frame_header->num_cr_points, - .random_seed = frame_header->grain_seed, - .cb_mult = frame_header->cb_mult, - .cb_luma_mult = frame_header->cb_luma_mult, - .cb_offset = frame_header->cb_offset, - .cr_mult = frame_header->cr_mult, - .cr_luma_mult = frame_header->cr_luma_mult, - .cr_offset = frame_header->cr_offset + .apply_grain = film_grain->apply_grain, + .overlap_flag = film_grain->overlap_flag, + .scaling_shift_minus8 = film_grain->grain_scaling_minus_8, + .chroma_scaling_from_luma = film_grain->chroma_scaling_from_luma, + .ar_coeff_lag = film_grain->ar_coeff_lag, + .ar_coeff_shift_minus6 = film_grain->ar_coeff_shift_minus_6, + .grain_scale_shift = film_grain->grain_scale_shift, + .clip_to_restricted_range = film_grain->clip_to_restricted_range, + .num_y_points = film_grain->num_y_points, + .num_cb_points = film_grain->num_cb_points, + .num_cr_points = film_grain->num_cr_points, + .random_seed = film_grain->grain_seed, + .cb_mult = film_grain->cb_mult, + .cb_luma_mult = film_grain->cb_luma_mult, + .cb_offset = film_grain->cb_offset, + .cr_mult = film_grain->cr_mult, + .cr_luma_mult = film_grain->cr_luma_mult, + .cr_offset = film_grain->cr_offset } }; @@ -258,23 +259,23 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u } /* Film Grain Params */ - if (frame_header->apply_grain) { + if (film_grain->apply_grain) { for (i = 0; i < 14; ++i) { - ppc->scaling_points_y[i][0] = frame_header->point_y_value[i]; - ppc->scaling_points_y[i][1] = frame_header->point_y_scaling[i]; + ppc->scaling_points_y[i][0] = film_grain->point_y_value[i]; + ppc->scaling_points_y[i][1] = film_grain->point_y_scaling[i]; } for (i = 0; i < 10; ++i) { - ppc->scaling_points_cb[i][0] = frame_header->point_cb_value[i]; - ppc->scaling_points_cb[i][1] = frame_header->point_cb_scaling[i]; - ppc->scaling_points_cr[i][0] = frame_header->point_cr_value[i]; - ppc->scaling_points_cr[i][1] = frame_header->point_cr_scaling[i]; + ppc->scaling_points_cb[i][0] = film_grain->point_cb_value[i]; + ppc->scaling_points_cb[i][1] = film_grain->point_cb_scaling[i]; + ppc->scaling_points_cr[i][0] = film_grain->point_cr_value[i]; + ppc->scaling_points_cr[i][1] = film_grain->point_cr_scaling[i]; } for (i = 0; i < 24; ++i) { - ppc->ar_coeffs_y[i] = (short)frame_header->ar_coeffs_y_plus_128[i] - 128; + ppc->ar_coeffs_y[i] = (short)film_grain->ar_coeffs_y_plus_128[i] - 128; } for (i = 0; i < 25; ++i) { - ppc->ar_coeffs_cb[i] = (short)frame_header->ar_coeffs_cb_plus_128[i] - 128; - ppc->ar_coeffs_cr[i] = (short)frame_header->ar_coeffs_cr_plus_128[i] - 128; + ppc->ar_coeffs_cb[i] = (short)film_grain->ar_coeffs_cb_plus_128[i] - 128; + ppc->ar_coeffs_cr[i] = (short)film_grain->ar_coeffs_cr_plus_128[i] - 128; } } diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c index fcce86b7e5..21b3eceb91 100644 --- a/libavcodec/vaapi_av1.c +++ b/libavcodec/vaapi_av1.c @@ -56,6 +56,7 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, AV1DecContext *s = avctx->priv_data; const AV1RawSequenceHeader *seq = s->raw_seq; const AV1RawFrameHeader *frame_header = s->raw_frame_header; + const AV1RawFilmGrainParams *film_grain = &frame_header->film_grain; VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private; VADecPictureParameterBufferAV1 pic_param; int8_t bit_depth_idx; @@ -115,14 +116,14 @@ static int vaapi_av1_start_frame(AVCodecContext *avctx, .update_data = frame_header->segmentation_update_data, }, .film_grain_info.film_grain_info_fields.bits = { - .apply_grain = frame_header->apply_grain, - .chroma_scaling_from_luma = frame_header->chroma_scaling_from_luma, - .grain_scaling_minus_8 = frame_header->grain_scaling_minus_8, - .ar_coeff_lag = frame_header->ar_coeff_lag, - .ar_coeff_shift_minus_6 = frame_header->ar_coeff_shift_minus_6, - .grain_scale_shift = frame_header->grain_scale_shift, - .overlap_flag = frame_header->overlap_flag, - .clip_to_restricted_range = frame_header->clip_to_restricted_range, + .apply_grain = film_grain->apply_grain, + .chroma_scaling_from_luma = film_grain->chroma_scaling_from_luma, + .grain_scaling_minus_8 = film_grain->grain_scaling_minus_8, + .ar_coeff_lag = film_grain->ar_coeff_lag, + .ar_coeff_shift_minus_6 = film_grain->ar_coeff_shift_minus_6, + .grain_scale_shift = film_grain->grain_scale_shift, + .overlap_flag = film_grain->overlap_flag, + .clip_to_restricted_range = film_grain->clip_to_restricted_range, }, .pic_info_fields.bits = { .frame_type = frame_header->frame_type,