From patchwork Wed Nov 25 20:54:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 24037 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id E5D86449B1B for ; Wed, 25 Nov 2020 23:20:09 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BA00068BB0D; Wed, 25 Nov 2020 23:20:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f193.google.com (mail-qt1-f193.google.com [209.85.160.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F211168B90B for ; Wed, 25 Nov 2020 23:20:02 +0200 (EET) Received: by mail-qt1-f193.google.com with SMTP id p12so2662831qtp.7 for ; Wed, 25 Nov 2020 13:20:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=7c7Le3a/cz1Ouzb8BbZG7iOTUch2msQ2GsMDmu0ABDI=; b=c8lSZQFQwhVJcstIdDLIgSL9AKgWyzzvz43fy7DQLMuRWILl9gOIIuZOot7nX63GSP 4ZQWSASxL4rV9yrfYmsk9i40D4FJXI9aBm0wXRRUgy1q3jx98uCFnASobMqEwOqHc6ji hEhlqo0BMDS0Dj2cFYPlntezvdHiCM5JpwGQQVETvliu87SOPwlrjTOZacrTit1zwUVs CWmzibYeAnIlF7qReNRI3UEkoeGF5SQAR8hYMIOsslmdwM83KAj6i5LL97rrUu4lrDjv QYd+thib5frXhkx4F0WDsohzRTR6shYBTxr5K4CvZ7b9j6WkBuAvRvl2+DUQHYHJRW3M TCfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7c7Le3a/cz1Ouzb8BbZG7iOTUch2msQ2GsMDmu0ABDI=; b=bmB/YX0Ip9XhPXKDUWygUQgbwoAP/w5SwLlJNA7OrZYU8UJ7QNeYvyDyTFMoWZjCST 01k+BGJqspXKPiTQxgOvhTxp06eTvOQyHmVVQIUzAPijDNGsrU/28+N4t/Texo1Mqbi+ eoibbJQrItCpYnU9UmR2ZgeC0ZJWIxE0gR29JK6+UHS12SV4Jj6FPfqZHrPuyjcu3jp7 YEuDsX9liGxKswxIdjMq4EMaWL3uwVOt2S5iButIGvaQSZXILbYc7e+c5HUG58d6PIiV WBSx9opUR7Zj/uSuLmH/1ir8JDHnPsCiKyj9OR1iM9sRBcsNrT/YypkYYKFo5spmAg0T G6uQ== X-Gm-Message-State: AOAM532QNpj7o9c2yZGO9QXAj2NegWqu1xm/WCs6sRslt5laELEMG/VR Ui1ypBIT/aSwoJYdtjoFj50I7uQmQQ4= X-Google-Smtp-Source: ABdhPJzyauPOajlXAy50od1RTjF9JQcspIXPzxMJxfVgptDBvnbL0lWWYXu3wATNFu/isQjh5mwFew== X-Received: by 2002:ac8:7306:: with SMTP id x6mr818812qto.272.1606337763462; Wed, 25 Nov 2020 12:56:03 -0800 (PST) Received: from localhost.localdomain ([181.23.86.176]) by smtp.gmail.com with ESMTPSA id v15sm436274qti.92.2020.11.25.12.56.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Nov 2020 12:56:02 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Nov 2020 17:54:42 -0300 Message-Id: <20201125205445.10859-2-jamrial@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201125205445.10859-1-jamrial@gmail.com> References: <20201125205445.10859-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avcodec/cbs_av1: split film grain param fields into their own struct X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Cosmetic change in preparation for the following patches. Signed-off-by: James Almer --- libavcodec/cbs_av1.h | 62 +++++++++++++++------------- libavcodec/cbs_av1_syntax_template.c | 7 ++-- libavcodec/nvdec_av1.c | 59 +++++++++++++------------- 3 files changed, 67 insertions(+), 61 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..c95b1c1c1a 100644 --- a/libavcodec/cbs_av1_syntax_template.c +++ b/libavcodec/cbs_av1_syntax_template.c @@ -1194,15 +1194,16 @@ static int FUNC(global_motion_params)(CodedBitstreamContext *ctx, RWContext *rw, } static int FUNC(film_grain_params)(CodedBitstreamContext *ctx, RWContext *rw, - AV1RawFrameHeader *current) + AV1RawFrameHeader *frame_header) { CodedBitstreamAV1Context *priv = ctx->priv_data; const AV1RawSequenceHeader *seq = priv->sequence_header; + AV1RawFilmGrainParams *current = &frame_header->film_grain; int num_pos_luma, num_pos_chroma; 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); 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; } }