From patchwork Thu Nov 12 21:49:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 23609 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 8A60D44AEFA for ; Thu, 12 Nov 2020 23:50:06 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 67A4F68C217; Thu, 12 Nov 2020 23:50:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f65.google.com (mail-qv1-f65.google.com [209.85.219.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1E4AA68C1CB for ; Thu, 12 Nov 2020 23:49:59 +0200 (EET) Received: by mail-qv1-f65.google.com with SMTP id r12so3597922qvq.13 for ; Thu, 12 Nov 2020 13:49:59 -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=pspfZl0UC794amM1rrCzZKMqozkR1UIwxgFY1jvj7g4=; b=rRq/k9PmhmLe6lWaAvZzgL10+76EvImMv7jtA1vNxjJPKj3DubwSd3SKaUovZjl4yd rDT9Cg5CNeARlPdRxuSLpsKIHEUj+SFi0JCZ4LGZ6vesBmcyr+ldHAVjRAcZt+5wNZzi JpmwEQeTNDPV2vIAXSRSk9UaFt2Q3fc7tETnPspNOwJolALupKn3b63vSLXBisLU4/RW hEdoGwyBMpBwPa8sO+w5lpOx5e5qoBGNahUVAY9OrkA0QCsOrxEY/qk5bfaKxN6UpbHq nbvJEFp1SnCXxIBeg2GY/N3fdibc5YJIHKPEVz2YsSv/fBFq3LgWaQTWmt5xFkYjAKS/ QtmQ== 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=pspfZl0UC794amM1rrCzZKMqozkR1UIwxgFY1jvj7g4=; b=riHist6/kt2uGr+L4TAkRp6ZEpUW8Lo5AcdqAeqQoU4GQftbBDn0eDMzSjX/aNxhii fgi0ik7eCZlEV3IER6o9cpbyZ7/Xpv3ezL/Fb208mxV1qrPHDURDfma21Y1ILMhzd2aa cadbtDp3KpwyeBGK+SFRkXa364YAZGMBm32l+qg0uyDDWBSGLYPZOQoVOBLhO1d7ZZOB f7llJoaq2nrqH+bO6bHJRqJPtjn+nTmyagD2mw3MFdtfR/YbMRRg3AKg3XgRk9RWjDo6 hbV8kj8ye+NMDKmjWZOsKUylAlZwfZMfRUZNPTD0Nvdh4oiGWb+zoDNxfDbVJITcYwoc kxSQ== X-Gm-Message-State: AOAM533s2lol7HPDeWod6/xZfB0dEzA4gjsFgspTxzu/nObbVsreXhhb gUagGkU/z4y96JNYk42A7Eq4bHrkuXo= X-Google-Smtp-Source: ABdhPJzS4dTnHqKcBWKR5+3HwqyUwgWog3AdI/tNGX5bS2MqjH54h4v5ZHxx4T2gJAYEyKJGhIzYyQ== X-Received: by 2002:ad4:4a87:: with SMTP id h7mr1939775qvx.14.1605217797436; Thu, 12 Nov 2020 13:49:57 -0800 (PST) Received: from localhost.localdomain ([181.23.94.194]) by smtp.gmail.com with ESMTPSA id p73sm5889499qka.79.2020.11.12.13.49.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Nov 2020 13:49:56 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 12 Nov 2020 18:49:25 -0300 Message-Id: <20201112214925.1268-1-jamrial@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <10998128-9371-9502-096b-69d1dc406c80@rothenpieler.org> References: <10998128-9371-9502-096b-69d1dc406c80@rothenpieler.org> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3 v2] 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" The spec in section 6.8.20 states the parameters should be loaded from a reference frame indexed by film_grain_params_ref_idx. Signed-off-by: James Almer --- libavcodec/nvdec_av1.c | 57 +++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/libavcodec/nvdec_av1.c b/libavcodec/nvdec_av1.c index 9da1c840e3..f6267b1d96 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 *frame_header = s->raw_frame_header; + const AV1RawFrameHeader *fg_header, *frame_header = s->raw_frame_header; NVDECContext *ctx = avctx->internal->hwaccel_priv_data; CUVIDPICPARAMS *pp = &ctx->pic_params; @@ -58,6 +58,11 @@ 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; @@ -182,23 +187,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 = 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, + .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, .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 + .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 } }; @@ -260,21 +265,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] = frame_header->point_y_value[i]; - ppc->scaling_points_y[i][1] = frame_header->point_y_scaling[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]; } 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] = 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]; } 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)fg_header->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)fg_header->ar_coeffs_cb_plus_128[i] - 128; + ppc->ar_coeffs_cr[i] = (short)fg_header->ar_coeffs_cr_plus_128[i] - 128; } }