From patchwork Wed Nov 25 20:54:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 24036 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 0C53C4488B5 for ; Wed, 25 Nov 2020 23:02:33 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E469C68BABF; Wed, 25 Nov 2020 23:02:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f196.google.com (mail-qt1-f196.google.com [209.85.160.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 225F268AA87 for ; Wed, 25 Nov 2020 23:02:26 +0200 (EET) Received: by mail-qt1-f196.google.com with SMTP id e60so2646220qtd.3 for ; Wed, 25 Nov 2020 13:02:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=EVHbVLGRiWRI7xspvsmyVkssE2KDaChWR93ujzefi7s=; b=BXISZS0FxOvI45qo/7+xCzfrN8yXHFbs8won2yuy9/ao5hj3v6xzyKTFCiNIfbMZrc Ah8F/sFlhpRXZfGaNYduZ/N4G3ogCV7GeeXl+2czSX8shrjMZ8EsK1G4NS5eYH+UDtwH i5PuloE1H6Qtlx9FY5t0rTbXIlbCXpvfv5md+AGZ6amQN9Xteexeh6djXgXSATYBvrq7 lCviso4vxttXn1EuSPSDVS8DWfKQoFG51Y9ShNPwod+qhy1NHxmDrG+lrfqccQTYD0p8 cp3bUzM7YhPqyYlxsRrjmYKaWQzCnYkOejdL6khVH6eAeNpUrlDVg38yCPfhP9zUi2Zf c4nA== 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:mime-version :content-transfer-encoding; bh=EVHbVLGRiWRI7xspvsmyVkssE2KDaChWR93ujzefi7s=; b=O9n6hay/UUfSm8shFDvUN5yVaazSWfOJRvha9yvSzhjb/YdVzEJizfjIEtU8QXtuVP KUEgKYY24y1FP+OQLTrq8lu3DpMP60HIg0d76shmSDsLyqlN4M+jREuE2WqjFnOaleFB gd6UeD/3F6Tnl2D5026GYu8n/DvCKgd6OLokQDAhSjX1H5iDvtNmtWxzaosWUJuPCq/e EaAC/14eyE5jmUOeX3aEX9GafuCzTFgtjR3sY3FT/RsJBJCKu4JmwmkASqtbK0GZovJd ua7bFnBAeoTM0ihR/9AVDau/sofJEVEvBl0jTGxHG2k7AXpoh05CVGZVLB3kqpUkJ0kY DveQ== X-Gm-Message-State: AOAM532SaDb8URdoe76dUdDL1/O/IJb62BQyKyBiMugnYNef5cQEusT8 SPTiz/paL4R7jG8P4JvtyCpt2BZagQw= X-Google-Smtp-Source: ABdhPJyNsBUmIm/QSgYLYNnL8lAO9FJvHOXFR91UQoS4BSvpYxVqh6Z2WZg32B32j3YhlQqa9tCM9Q== X-Received: by 2002:ac8:5649:: with SMTP id 9mr755794qtt.379.1606337761872; Wed, 25 Nov 2020 12:56:01 -0800 (PST) Received: from localhost.localdomain ([181.23.86.176]) by smtp.gmail.com with ESMTPSA id v15sm436274qti.92.2020.11.25.12.56.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Nov 2020 12:56:01 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Nov 2020 17:54:41 -0300 Message-Id: <20201125205445.10859-1-jamrial@gmail.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5] Revert "avcodec/nvdec_av1: fix setting film grain parameters for frames with update_grain == 0" 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" This reverts commit f9eec6298387fe72cd8035ff45276cfc3da784a8. This does not effectively cover all cases. The values for some frames need to be inferred by the decoder. Signed-off-by: James Almer --- libavcodec/nvdec_av1.c | 57 +++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/libavcodec/nvdec_av1.c b/libavcodec/nvdec_av1.c index f6267b1d96..9da1c840e3 100644 --- a/libavcodec/nvdec_av1.c +++ b/libavcodec/nvdec_av1.c @@ -41,7 +41,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 *fg_header, *frame_header = s->raw_frame_header; + const AV1RawFrameHeader *frame_header = s->raw_frame_header; NVDECContext *ctx = avctx->internal->hwaccel_priv_data; CUVIDPICPARAMS *pp = &ctx->pic_params; @@ -58,11 +58,6 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u if (ret < 0) return ret; - if (frame_header->apply_grain && !frame_header->update_grain) - fg_header = s->ref[frame_header->film_grain_params_ref_idx].raw_frame_header; - else - fg_header = frame_header; - fdd = (FrameDecodeData*)cur_frame->private_ref->data; cf = (NVDECFrame*)fdd->hwaccel_priv; @@ -187,23 +182,23 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u /* Film Grain Params */ .apply_grain = frame_header->apply_grain, - .overlap_flag = fg_header->overlap_flag, - .scaling_shift_minus8 = fg_header->grain_scaling_minus_8, - .chroma_scaling_from_luma = fg_header->chroma_scaling_from_luma, - .ar_coeff_lag = fg_header->ar_coeff_lag, - .ar_coeff_shift_minus6 = fg_header->ar_coeff_shift_minus_6, - .grain_scale_shift = fg_header->grain_scale_shift, - .clip_to_restricted_range = fg_header->clip_to_restricted_range, - .num_y_points = fg_header->num_y_points, - .num_cb_points = fg_header->num_cb_points, - .num_cr_points = fg_header->num_cr_points, + .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 = fg_header->cb_mult, - .cb_luma_mult = fg_header->cb_luma_mult, - .cb_offset = fg_header->cb_offset, - .cr_mult = fg_header->cr_mult, - .cr_luma_mult = fg_header->cr_luma_mult, - .cr_offset = fg_header->cr_offset + .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 } }; @@ -265,21 +260,21 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u /* Film Grain Params */ if (frame_header->apply_grain) { for (i = 0; i < 14; ++i) { - ppc->scaling_points_y[i][0] = fg_header->point_y_value[i]; - ppc->scaling_points_y[i][1] = fg_header->point_y_scaling[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]; } for (i = 0; i < 10; ++i) { - ppc->scaling_points_cb[i][0] = fg_header->point_cb_value[i]; - ppc->scaling_points_cb[i][1] = fg_header->point_cb_scaling[i]; - ppc->scaling_points_cr[i][0] = fg_header->point_cr_value[i]; - ppc->scaling_points_cr[i][1] = fg_header->point_cr_scaling[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]; } for (i = 0; i < 24; ++i) { - ppc->ar_coeffs_y[i] = (short)fg_header->ar_coeffs_y_plus_128[i] - 128; + ppc->ar_coeffs_y[i] = (short)frame_header->ar_coeffs_y_plus_128[i] - 128; } for (i = 0; i < 25; ++i) { - ppc->ar_coeffs_cb[i] = (short)fg_header->ar_coeffs_cb_plus_128[i] - 128; - ppc->ar_coeffs_cr[i] = (short)fg_header->ar_coeffs_cr_plus_128[i] - 128; + 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; } } 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; } } From patchwork Wed Nov 25 20:54:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 24035 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 C18B944B7D0 for ; Wed, 25 Nov 2020 23:01:32 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9804968BAE4; Wed, 25 Nov 2020 23:01:32 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f194.google.com (mail-qk1-f194.google.com [209.85.222.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BD0C268BA00 for ; Wed, 25 Nov 2020 23:01:25 +0200 (EET) Received: by mail-qk1-f194.google.com with SMTP id i199so6075421qke.5 for ; Wed, 25 Nov 2020 13:01:25 -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=vr1XIqNgmIlNo/XYpcK02mT7kGocbts79AtBoMYCsX8=; b=rtl9L4sE3iHuu+boDtZb7DxB1bIpihFNIiNjdQ7Kyy+wAxGgRXfOpMUHAygPt+A1BY NHEINRvV6l5KIlN6s50CuIXRkrmUTw2MzyXOs5fmd7uDbyHc944R0d7+iSOGqGgt/vjN GZii1x75xOO4ZORKf/1BqriptdhG4QdeaBAThNRIdC7uBlDGGh1cDP7zHDn0ZFHfutUs TddGzIgseDmKtGiJSDYDxF0z00Opuj+McWbscWQItPXQjgA1NJDMi4UPeVZWZSvL/FEz lrkEA0KNjZGozoBaQ9bcXrCkP7sN1flMyBrJEuM3Iy1qBz/2m+lj6W30NH3aCXgdWHmu ewJQ== 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=vr1XIqNgmIlNo/XYpcK02mT7kGocbts79AtBoMYCsX8=; b=sQArnNj4oO41f2TLDDeoW3eOzRpSmPlv7RwoPUQ18T3jqbqPEjmwSmm3byMgj2Dkc+ tfL+3g7TgBLpmTKjXASg7mB/R3lqV2erjiZJ2xodWgFRKe4gTvH3yWFhCJEzoD9RnSUg a8fI1sVUgTov0Zg7EhHTBvq1IkG0N0TstOIPjigNmbW4EteNuegbrFDpNuFKRLXenVlf wlOgH+sJXRmnPqG39nT6rtDmDYUAxUTrLngQa7lnpJcAFvehFh1xT9p/3X/F48adu3yA HFQsHcD7OGJQl1wOoJJ3Ickj7ejhRzuvdGQ9MH7zB762D41XDCSsty91otnebTxs48be TsTQ== X-Gm-Message-State: AOAM531h/fgt9mkE4a+hCjrXlAkmqqEIrcui6P9GRkIzTYTSRsLUP2is Qkz6nCOqR2Q3kFg6tYh5kdd6c6b//68= X-Google-Smtp-Source: ABdhPJwWFQo7DMioSGtmZd9uC1i7Bzbsypdq2OmQiFGVPIA85og/LLeHdiMTs//qSQ1Ym0epS8VzEg== X-Received: by 2002:a05:622a:9:: with SMTP id x9mr780099qtw.324.1606337764959; Wed, 25 Nov 2020 12:56:04 -0800 (PST) Received: from localhost.localdomain ([181.23.86.176]) by smtp.gmail.com with ESMTPSA id v15sm436274qti.92.2020.11.25.12.56.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Nov 2020 12:56:04 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Nov 2020 17:54:43 -0300 Message-Id: <20201125205445.10859-3-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 3/5] avcodec/av1dec: infer and store film grain param values in AV1Frame 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" They are not always coded in the bistream for each frame. In some cases, the values need to be taken from a reference frame. See section 6.8.20 from the AV1 spec. Signed-off-by: James Almer --- libavcodec/av1dec.c | 25 +++++++++++++++++++++++++ libavcodec/av1dec.h | 2 ++ 2 files changed, 27 insertions(+) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index ce051d4e6d..1589b8f0c0 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -247,6 +247,26 @@ static void coded_lossless_param(AV1DecContext *s) } } +static void load_grain_params(AV1DecContext *s) +{ + const AV1RawFrameHeader *header = s->raw_frame_header; + const AV1RawFilmGrainParams *film_grain = &header->film_grain, *src; + AV1RawFilmGrainParams *dst = &s->cur_frame.film_grain; + + if (!film_grain->apply_grain) + return; + + if (film_grain->update_grain) { + memcpy(dst, film_grain, sizeof(*dst)); + return; + } + + src = &s->ref[film_grain->film_grain_params_ref_idx].film_grain; + + memcpy(dst, src, sizeof(*dst)); + dst->grain_seed = film_grain->grain_seed; +} + static int init_tile_data(AV1DecContext *s) { @@ -447,6 +467,7 @@ static void av1_frame_unref(AVCodecContext *avctx, AV1Frame *f) f->spatial_id = f->temporal_id = 0; memset(f->skip_mode_frame_idx, 0, 2 * sizeof(uint8_t)); + memset(&f->film_grain, 0, sizeof(f->film_grain)); f->coded_lossless = 0; } @@ -482,6 +503,9 @@ static int av1_frame_ref(AVCodecContext *avctx, AV1Frame *dst, const AV1Frame *s memcpy(dst->skip_mode_frame_idx, src->skip_mode_frame_idx, 2 * sizeof(uint8_t)); + memcpy(&dst->film_grain, + &src->film_grain, + sizeof(dst->film_grain)); dst->coded_lossless = src->coded_lossless; return 0; @@ -762,6 +786,7 @@ static int get_current_frame(AVCodecContext *avctx) global_motion_params(s); skip_mode_params(s); coded_lossless_param(s); + load_grain_params(s); return ret; } diff --git a/libavcodec/av1dec.h b/libavcodec/av1dec.h index 4b218f64bb..7e3b0c7291 100644 --- a/libavcodec/av1dec.h +++ b/libavcodec/av1dec.h @@ -47,6 +47,8 @@ typedef struct AV1Frame { uint8_t skip_mode_frame_idx[2]; + AV1RawFilmGrainParams film_grain; + uint8_t coded_lossless; } AV1Frame; From patchwork Wed Nov 25 20:54:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 24033 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 5157D44B368 for ; Wed, 25 Nov 2020 22:56:15 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2E68268BABF; Wed, 25 Nov 2020 22:56:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f193.google.com (mail-qk1-f193.google.com [209.85.222.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 46299689F22 for ; Wed, 25 Nov 2020 22:56:08 +0200 (EET) Received: by mail-qk1-f193.google.com with SMTP id q5so5995604qkc.12 for ; Wed, 25 Nov 2020 12:56:08 -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=IDLBXrEVesZCwG+bYqc22OLHXYzQQgdIHSREg/QhHRI=; b=XPO0HOKfpEa37GgnVcBuxhBRh3JDfHRGvBk7hy7eyoQyXhmpq+CS9gfuQ9p4+e1GiS /j3zmnos5WkQKl81PyFG1buLvVWPWqATrZHcLfAd9n5a3s4vvNTJfLtBe1C6E+4Oc1Ba AAIIvYwT3kQLs4av43/8VaDyjjV+XwrVKPsHKtFIaY2r473h+0Ib1MxVCi3v+XrlC3yw CcKX9hjR7utF8S4v8wmqGu+5VhsdRntCCLLqr7xZyu9Dj23pqAp5K26JAuZXDmC4pbGD Jr30skbI0n0e36aPGKgTDkz6WJaCUaIT9XUk4nrmRvu+0dohYDNpW+1blmqZg3icz7mc dA4A== 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=IDLBXrEVesZCwG+bYqc22OLHXYzQQgdIHSREg/QhHRI=; b=FhYXrqLaSuIJECm6FCYHXs2dE0hDOWUQHLTU3gti3zh9jXc7WpEfqV/vBy205u48hV eJ+Y629YnGzGcKElkNEsmWYoa9DYxpeMN6W3EyfO3NnwAmOD8nbK4tE5gtrdKIsSclBh YSNphPCkkQeClPH5ZXMWpneEXbiKe64MKfS7ZWe72SH/oTHK7F/YieDdtRdoIVN5BVNE WsA/3npcfLoV8iHM2w18HdeqMsfuNmkMtt5ImIyGcJNFIksUkI/QHDQkLbLFtNr/4E73 MlYEpUpcggEoe0nhiBxOXbdQOe0vcDb5AgWhtVN2b7XTX8RZemV1i35TpllDz0s7HVoK aJYg== X-Gm-Message-State: AOAM532+UG8ygvVBtxHlguMc4WkomHmuDpiF7//sQfQlTTFlovW1ILEH c6CM/nhYHGMHM/9MYeFqXCUeTQ+zZ6M= X-Google-Smtp-Source: ABdhPJzvotpByxbKzfA4XdYUbp55pL0CHKC5HW5fP41DfbZNkX2LhKYrmfjp+ljEfXtuB3Y3nekReQ== X-Received: by 2002:a37:a54f:: with SMTP id o76mr780155qke.201.1606337766458; Wed, 25 Nov 2020 12:56:06 -0800 (PST) Received: from localhost.localdomain ([181.23.86.176]) by smtp.gmail.com with ESMTPSA id v15sm436274qti.92.2020.11.25.12.56.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Nov 2020 12:56:05 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Nov 2020 17:54:44 -0300 Message-Id: <20201125205445.10859-4-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 4/5] avcodec/nvdec_av1: read film grain param values from AV1Frames 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" Signed-off-by: James Almer --- libavcodec/nvdec_av1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/nvdec_av1.c b/libavcodec/nvdec_av1.c index 1bac1fe26c..bd920d814a 100644 --- a/libavcodec/nvdec_av1.c +++ b/libavcodec/nvdec_av1.c @@ -42,7 +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; + const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain; NVDECContext *ctx = avctx->internal->hwaccel_priv_data; CUVIDPICPARAMS *pp = &ctx->pic_params; From patchwork Wed Nov 25 20:54:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 24034 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 721AB44B368 for ; Wed, 25 Nov 2020 22:56:18 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5751468B8A1; Wed, 25 Nov 2020 22:56:18 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f195.google.com (mail-qk1-f195.google.com [209.85.222.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7A38E689F22 for ; Wed, 25 Nov 2020 22:56:09 +0200 (EET) Received: by mail-qk1-f195.google.com with SMTP id d9so6020542qke.8 for ; Wed, 25 Nov 2020 12:56:09 -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=9tp9OfOVUtVi1qiCXwUw8DIOTy+uZhV4GUpeu33U2n8=; b=QRAuvOnx8BsKQd0RyUwYWG+iWRKHUHy4iRhRFOppuXwdU0pwsoShCIqa1P3/2hw0YD feDjgPECBkH3twDh+uPj+tioc/UF6WUu7sAPneuAX9eOGmEMcs7srreIrsAmXsijK0md LV7vhsQT3Xyei53yGGZtlsF7FnFJXukLbmfcYLhnH6bzakZz7Vf5i6hDmTvrTF0cyXGh FZVzGEQ+kL2QYNSxo1hY/wtJDk69bPWxhMgpEjcvfphCfH+zJccGQ0a1gETad9AHV0Jz WZ4bNQabcdKoG0vLxzglb4hpB6yyjsnY99X2fLiY5BHvsQVzZxtX5ne9cddTye6PBB05 Xltw== 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=9tp9OfOVUtVi1qiCXwUw8DIOTy+uZhV4GUpeu33U2n8=; b=ZL2taCiHvXcZgQeV6CvuFg7kz9CBv458UEQ0YMEsInpCfeLJk7TWKubaYGQ5sFbhmk CRLw7+MaNmyPAUvNWUoPx4rghXHWLI+TqWMWc87eBPkpXnWZ+HsgUCVeC5pK//AZaCOT 2Lx11YPW7EZDWK6g+yUjvQ0UzksRTA4Qwki0DQtmeS8zb71SrDIGmaTew1DVH8gu40qN bd8adgqQUcZW2jEJM6uFYevKwY8pl7i2qo68+jhCXUVsOKg/aZvvRFRyK6z5y8wPUMEX ny3BvKkWf0nXWmUr1ISzNIcuIYn9VMB32MhKpc/Vl+ds5L+HZyTfNX/0UbCCyRsGpu1r tr1g== X-Gm-Message-State: AOAM533zgUhm289+ln+TA7jwoUh5H79y6qUKeWuCcNDNW3vHxE4XoQqt Z57/a+G5BFcFwn7Bdz7aXLfT6kpWBvE= X-Google-Smtp-Source: ABdhPJyEBEUdOstHHCjOfEp8HeEjpQ9LqHWvBoDwAjNgY00P668aJ5AB2rZ7wHqOqUybbm0pAwD+9Q== X-Received: by 2002:ae9:f204:: with SMTP id m4mr816635qkg.227.1606337767913; Wed, 25 Nov 2020 12:56:07 -0800 (PST) Received: from localhost.localdomain ([181.23.86.176]) by smtp.gmail.com with ESMTPSA id v15sm436274qti.92.2020.11.25.12.56.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Nov 2020 12:56:07 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Nov 2020 17:54:45 -0300 Message-Id: <20201125205445.10859-5-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 5/5] avcodec/dxva2_av1: read film grain param values from AV1Frames 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" Signed-off-by: James Almer --- libavcodec/dxva2_av1.c | 63 +++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/libavcodec/dxva2_av1.c b/libavcodec/dxva2_av1.c index c6cbd48f5f..72c38f5d12 100644 --- a/libavcodec/dxva2_av1.c +++ b/libavcodec/dxva2_av1.c @@ -59,6 +59,7 @@ static int fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *c int i,j, uses_lr; const AV1RawSequenceHeader *seq = h->raw_seq; const AV1RawFrameHeader *frame_header = h->raw_frame_header; + const AV1RawFilmGrainParams *film_grain = &h->cur_frame.film_grain; unsigned char remap_lr_type[4] = { AV1_RESTORE_NONE, AV1_RESTORE_SWITCHABLE, AV1_RESTORE_WIENER, AV1_RESTORE_SGRPROJ }; @@ -214,47 +215,47 @@ static int fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *c } /* Film grain */ - if (frame_header->apply_grain) { + if (film_grain->apply_grain) { pp->film_grain.apply_grain = 1; - pp->film_grain.scaling_shift_minus8 = frame_header->grain_scaling_minus_8; - pp->film_grain.chroma_scaling_from_luma = frame_header->chroma_scaling_from_luma; - pp->film_grain.ar_coeff_lag = frame_header->ar_coeff_lag; - pp->film_grain.ar_coeff_shift_minus6 = frame_header->ar_coeff_shift_minus_6; - pp->film_grain.grain_scale_shift = frame_header->grain_scale_shift; - pp->film_grain.overlap_flag = frame_header->overlap_flag; - pp->film_grain.clip_to_restricted_range = frame_header->clip_to_restricted_range; + pp->film_grain.scaling_shift_minus8 = film_grain->grain_scaling_minus_8; + pp->film_grain.chroma_scaling_from_luma = film_grain->chroma_scaling_from_luma; + pp->film_grain.ar_coeff_lag = film_grain->ar_coeff_lag; + pp->film_grain.ar_coeff_shift_minus6 = film_grain->ar_coeff_shift_minus_6; + pp->film_grain.grain_scale_shift = film_grain->grain_scale_shift; + pp->film_grain.overlap_flag = film_grain->overlap_flag; + pp->film_grain.clip_to_restricted_range = film_grain->clip_to_restricted_range; pp->film_grain.matrix_coeff_is_identity = (seq->color_config.matrix_coefficients == AVCOL_SPC_RGB); - pp->film_grain.grain_seed = frame_header->grain_seed; - pp->film_grain.num_y_points = frame_header->num_y_points; - for (i = 0; i < frame_header->num_y_points; i++) { - pp->film_grain.scaling_points_y[i][0] = frame_header->point_y_value[i]; - pp->film_grain.scaling_points_y[i][1] = frame_header->point_y_scaling[i]; + pp->film_grain.grain_seed = film_grain->grain_seed; + pp->film_grain.num_y_points = film_grain->num_y_points; + for (i = 0; i < film_grain->num_y_points; i++) { + pp->film_grain.scaling_points_y[i][0] = film_grain->point_y_value[i]; + pp->film_grain.scaling_points_y[i][1] = film_grain->point_y_scaling[i]; } - pp->film_grain.num_cb_points = frame_header->num_cb_points; - for (i = 0; i < frame_header->num_cb_points; i++) { - pp->film_grain.scaling_points_cb[i][0] = frame_header->point_cb_value[i]; - pp->film_grain.scaling_points_cb[i][1] = frame_header->point_cb_scaling[i]; + pp->film_grain.num_cb_points = film_grain->num_cb_points; + for (i = 0; i < film_grain->num_cb_points; i++) { + pp->film_grain.scaling_points_cb[i][0] = film_grain->point_cb_value[i]; + pp->film_grain.scaling_points_cb[i][1] = film_grain->point_cb_scaling[i]; } - pp->film_grain.num_cr_points = frame_header->num_cr_points; - for (i = 0; i < frame_header->num_cr_points; i++) { - pp->film_grain.scaling_points_cr[i][0] = frame_header->point_cr_value[i]; - pp->film_grain.scaling_points_cr[i][1] = frame_header->point_cr_scaling[i]; + pp->film_grain.num_cr_points = film_grain->num_cr_points; + for (i = 0; i < film_grain->num_cr_points; i++) { + pp->film_grain.scaling_points_cr[i][0] = film_grain->point_cr_value[i]; + pp->film_grain.scaling_points_cr[i][1] = film_grain->point_cr_scaling[i]; } for (i = 0; i < 24; i++) { - pp->film_grain.ar_coeffs_y[i] = frame_header->ar_coeffs_y_plus_128[i]; + pp->film_grain.ar_coeffs_y[i] = film_grain->ar_coeffs_y_plus_128[i]; } for (i = 0; i < 25; i++) { - pp->film_grain.ar_coeffs_cb[i] = frame_header->ar_coeffs_cb_plus_128[i]; - pp->film_grain.ar_coeffs_cr[i] = frame_header->ar_coeffs_cr_plus_128[i]; + pp->film_grain.ar_coeffs_cb[i] = film_grain->ar_coeffs_cb_plus_128[i]; + pp->film_grain.ar_coeffs_cr[i] = film_grain->ar_coeffs_cr_plus_128[i]; } - pp->film_grain.cb_mult = frame_header->cb_mult; - pp->film_grain.cb_luma_mult = frame_header->cb_luma_mult; - pp->film_grain.cr_mult = frame_header->cr_mult; - pp->film_grain.cr_luma_mult = frame_header->cr_luma_mult; - pp->film_grain.cb_offset = frame_header->cb_offset; - pp->film_grain.cr_offset = frame_header->cr_offset; - pp->film_grain.cr_offset = frame_header->cr_offset; + pp->film_grain.cb_mult = film_grain->cb_mult; + pp->film_grain.cb_luma_mult = film_grain->cb_luma_mult; + pp->film_grain.cr_mult = film_grain->cr_mult; + pp->film_grain.cr_luma_mult = film_grain->cr_luma_mult; + pp->film_grain.cb_offset = film_grain->cb_offset; + pp->film_grain.cr_offset = film_grain->cr_offset; + pp->film_grain.cr_offset = film_grain->cr_offset; } // XXX: Setting the StatusReportFeedbackNumber breaks decoding on some drivers (tested on NVIDIA 457.09)