From patchwork Sat Nov 14 13:43:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 23625 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 B586144989E for ; Sat, 14 Nov 2020 15:49:52 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 929A968C146; Sat, 14 Nov 2020 15:49:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f194.google.com (mail-qt1-f194.google.com [209.85.160.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 86C58689F05 for ; Sat, 14 Nov 2020 15:49:46 +0200 (EET) Received: by mail-qt1-f194.google.com with SMTP id f93so9346509qtb.10 for ; Sat, 14 Nov 2020 05:49:46 -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=ydhqMBUTEPWyq0L84flZK8Rx3YViW7I9ntxREYOJO80=; b=JcgevWS770rKCLf8awCFAD2ktDaIMbwtec5xYyYYR2eVPwZwq8GOuA2J0c1VyJ5Z5S F2S6EE5X2vkBFwsWzNC9wcDv4wfW8KCD08hlcZJANmA9jZ4Bjiae8v88eK6h3GFT0wfI IGSo5yTfLFh30Lz0jpoIk0Q26qIkBbirNhmZtFpEXi8003E8N/vogBu9Pt9JViuy/i/T 6x8gCGk74MRH6ja1whq0+gFGfezhJgFIuc1VWFDPDGxajkuJia1rAp6sbS+gLYWQUbjt Oty6D4pIcXVgX+E41QF95dYUtYHRxLjTFP+GnEAderlYdIlfXp6g7jPZ4DXLdM3N37tb UYsQ== 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=ydhqMBUTEPWyq0L84flZK8Rx3YViW7I9ntxREYOJO80=; b=Qs1lcryRogDT6BO2TfzX2y2M1i+r3Vr66PsuQKdQqyCJkPXwKUMqdspJZO51UhaiNl WTQGXdlgtdSFap3ufhzlbFX8XYzjJ+W76clpZrEyJmhf+ZvXpHxjnm6XVVeRfqm75for 4rnqEIG9RorNZwWHQJI/yFTYUOo4yCAtbAyvHQPQ8jpfB0pXWhVqGxTp73r1epd7p67u +zTDGX8r2ircN69VKrL5S+wHwLcS4N+fILwHJWdvAg8h8NV1ejgZYvBkc4zl56EBSCTa M1+g0SKP/adkJXWLVEw6TeEAyV8FHZs9E0FJQ/ogYVPnLvbQXIsjFVIMoaNYDtGOe6Fq VCBA== X-Gm-Message-State: AOAM5301eXN7yqXA5Z9kxxlaMrAsYC5barj0wwBiqyoceD3s24XKhP3A AQo/lk3aROUi+zZ28zwG/aPzzEaRmp+TzA== X-Google-Smtp-Source: ABdhPJy4Ou+/ELUZi1cYx8koaQn1m7wgUCwAkfX8NPh/sKXxqkRS3CiQBmKJfhRAIgUwmhVoepVgxw== X-Received: by 2002:ac8:734a:: with SMTP id q10mr6345859qtp.389.1605361441781; Sat, 14 Nov 2020 05:44:01 -0800 (PST) Received: from localhost.localdomain ([181.23.74.184]) by smtp.gmail.com with ESMTPSA id p127sm8445579qkc.37.2020.11.14.05.44.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 14 Nov 2020 05:44:01 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 14 Nov 2020 10:43:31 -0300 Message-Id: <20201114134332.885-1-jamrial@gmail.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/av1dec: derive coded_lossless only where it's used 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" No hwaccel other than nvdec cares about this field Signed-off-by: James Almer --- libavcodec/av1dec.c | 33 --------------------------------- libavcodec/av1dec.h | 2 -- libavcodec/nvdec_av1.c | 29 ++++++++++++++++++++++++++++- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index c1967f03bd..c8f9152451 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -217,36 +217,6 @@ static void skip_mode_params(AV1DecContext *s) AV1_REF_FRAME_LAST + FFMAX(forward_idx, second_forward_idx); } -static void coded_lossless_param(AV1DecContext *s) -{ - const AV1RawFrameHeader *header = s->raw_frame_header; - int i; - - if (header->delta_q_y_dc || header->delta_q_u_ac || - header->delta_q_u_dc || header->delta_q_v_ac || - header->delta_q_v_dc) { - s->cur_frame.coded_lossless = 0; - return; - } - - s->cur_frame.coded_lossless = 1; - for (i = 0; i < AV1_MAX_SEGMENTS; i++) { - int qindex; - if (header->feature_enabled[i][AV1_SEG_LVL_ALT_Q]) { - qindex = (header->base_q_idx + - header->feature_value[i][AV1_SEG_LVL_ALT_Q]); - } else { - qindex = header->base_q_idx; - } - qindex = av_clip_uintp2(qindex, 8); - - if (qindex) { - s->cur_frame.coded_lossless = 0; - return; - } - } -} - static int init_tile_data(AV1DecContext *s) { @@ -447,7 +417,6 @@ 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)); - f->coded_lossless = 0; } static int av1_frame_ref(AVCodecContext *avctx, AV1Frame *dst, const AV1Frame *src) @@ -482,7 +451,6 @@ 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)); - dst->coded_lossless = src->coded_lossless; return 0; @@ -760,7 +728,6 @@ static int get_current_frame(AVCodecContext *avctx) global_motion_params(s); skip_mode_params(s); - coded_lossless_param(s); return ret; } diff --git a/libavcodec/av1dec.h b/libavcodec/av1dec.h index 4b218f64bb..bc6ae68d1a 100644 --- a/libavcodec/av1dec.h +++ b/libavcodec/av1dec.h @@ -46,8 +46,6 @@ typedef struct AV1Frame { int32_t gm_params[AV1_NUM_REF_FRAMES][6]; uint8_t skip_mode_frame_idx[2]; - - uint8_t coded_lossless; } AV1Frame; typedef struct TileGroupInfo { diff --git a/libavcodec/nvdec_av1.c b/libavcodec/nvdec_av1.c index f6267b1d96..1a553902bc 100644 --- a/libavcodec/nvdec_av1.c +++ b/libavcodec/nvdec_av1.c @@ -37,6 +37,33 @@ static int get_bit_depth_from_seq(const AV1RawSequenceHeader *seq) return 8; } +static int get_coded_lossless_param(const AV1DecContext *s) +{ + const AV1RawFrameHeader *frame_header = s->raw_frame_header; + + if (frame_header->delta_q_y_dc || frame_header->delta_q_u_ac || + frame_header->delta_q_u_dc || frame_header->delta_q_v_ac || + frame_header->delta_q_v_dc) { + return 0; + } + + for (int i = 0; i < AV1_MAX_SEGMENTS; i++) { + int qindex; + if (frame_header->feature_enabled[i][AV1_SEG_LVL_ALT_Q]) { + qindex = (frame_header->base_q_idx + + frame_header->feature_value[i][AV1_SEG_LVL_ALT_Q]); + } else { + qindex = frame_header->base_q_idx; + } + qindex = av_clip_uintp2(qindex, 8); + + if (qindex) + return 0; + } + + return 1; +} + static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, uint32_t size) { const AV1DecContext *s = avctx->priv_data; @@ -119,7 +146,7 @@ static int nvdec_av1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u .delta_q_present = frame_header->delta_q_present, .delta_q_res = frame_header->delta_q_res, .using_qmatrix = frame_header->using_qmatrix, - .coded_lossless = s->cur_frame.coded_lossless, + .coded_lossless = get_coded_lossless_param(s), .use_superres = frame_header->use_superres, .tx_mode = frame_header->tx_mode, .reference_mode = frame_header->reference_select,