From patchwork Mon Sep 23 16:35:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 51771 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:d154:0:b0:48e:c0f8:d0de with SMTP id bt20csp2663824vqb; Mon, 23 Sep 2024 12:04:20 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX1aXo/fVnrmFsX8KyeFjMPpAZItFwvXVB9/ydTS4h3W6IWLpT9BPVKmg56b5A0BCSKFO5Pg4C3NMcdAkLhjWq7@gmail.com X-Google-Smtp-Source: AGHT+IHVqt2oa0BN63gGfenNgTC51xSELg4qP9HQwGedy9fhO1hKlUvk37SQX93NQdRabVeC1fcj X-Received: by 2002:a05:6512:15a0:b0:52f:d69e:bb38 with SMTP id 2adb3069b0e04-536acf6a470mr5836150e87.2.1727118260151; Mon, 23 Sep 2024 12:04:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727118260; cv=none; d=google.com; s=arc-20240605; b=DmodvjrYHDcDMki7K+iyEx2kjqBdQFApZfNiz7CXTxhBuYAcEIpqxUTRJ1py8yG/oA n6lXzc/xXm/wwRDsdVirL6X85yiY5iD9eNtmHCFbdblGzjEgYNxwyWiKMbyDfnEWEEau H3UHeM98i9wGp24v2bVkjKfF8nHcIjzIxfC6s0Q4ky8JMWN3kvAgt6M8SGUyV8i9RFVJ LmrLbVZvicVnwmixllMv/R4dzBa7XOys7RAybsDHSVQjZX456ony+Djolk1mt6wcAZvy UQ6N2LnC9RHs5Le0QgBVg9WeMiGfeoUdPL4eCyCsa81HNuofF2j/9kKAsZvqazvhCPyx D8Mw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=JG1AQWSxyLyNnN+7b4c4PD8V7+JgDtlBSoWq8WuOhbM=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=gPwimrozMfdTRhzD+llu3GfM++oLEz5A7onlpeWwtSnRbbj6NWYOH065ZvZngjmzFe mCbVgPzZQ1jwPWl9UEuXYV4rsLVtv8RiYKmqpHKkogaJeLl4rUOjmKswETH2YUGK8aBU VUdK2Mn9Pf5AIZC4gAx61H60Kf2oY2LoXh/QM78OWRH1JFU5g0xwR060SvuVXsnULESQ v++RMb0t3gg6vfTvy/zaoq7lHhAJLgAYG99fuBQMJ3F8IHN7cSBlFdu1qXMGb5BRplJ6 FDPYYjBodo9xZs/AydhpN1kGUkKF5CUvGSbsvEHv/6vCko1H6OW4bzOziOdKfDk45UTM 8R1g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Q7H9047v; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 2adb3069b0e04-5368708e04csi7362060e87.286.2024.09.23.12.04.19; Mon, 23 Sep 2024 12:04:20 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Q7H9047v; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6E41A68DA4D; Mon, 23 Sep 2024 19:35:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f47.google.com (mail-qv1-f47.google.com [209.85.219.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C055968D6A7 for ; Mon, 23 Sep 2024 19:35:14 +0300 (EEST) Received: by mail-qv1-f47.google.com with SMTP id 6a1803df08f44-6c56eec7fccso31941636d6.3 for ; Mon, 23 Sep 2024 09:35:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1727109313; x=1727714113; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=kNrXNFif8KRt71y3FqK6y4xqELWIDw/vtJmepWKh2YE=; b=Q7H9047vRm3W9OvVIa65cUZyTI9BaVoFvfTa6EXNQP0cgvw9KLGt545wvEgcxBMobn sRuQbPhHTJ4ls06Ad/UxyIoi94dCfVhVSRQwFkTwviNe0Aoj0sjbyq7sop71Stl4N0X+ ZLCzxH7xKnJ3MGYU+TFfulALTzad/57pdlfGmB4hlchsaKou4mT11me7LR+tCZYKHhyw AJ0aM4NfP4eRs9lXit9uJ6pZxxPZ37MAahv/CvRXPGvxOeV4DZGKKolqurJVYDFNkvdi sBNSj3FLSke84UThfaWFuhxomsCYt7WF4P2aMM4yk7W3TWWMse7om5VBx5Bq7aFqMkct jBVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727109313; x=1727714113; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kNrXNFif8KRt71y3FqK6y4xqELWIDw/vtJmepWKh2YE=; b=ViTMmMEV6UkAwFXBvOqwKmfTP3cnz7flYaex8XM+uQL9DDWH9296Th9x5/SDeLHAGT 4y7Q/yvlPdUQhF4ei1d8FyxyDfC7JGQYUU0YfxoOkxuImYEgaSceDGhkYwhwjUuOdw6t tZMs/DAcdIrEtGHIuBgafpCiHj47aBNZzPLyEcpfm3EsGyJRYpR8mAA+DIlnMXhu1L6Q Je7QrMOgF/+PuMtNdrQ+T5PmJHzM94yiSoYeyaqoSODomk/+0Y9sHuth5q+69VXvE4Ca 2kwHJzZKGxbw2zMjG3AVk2RvjDAJScmWVqGyMIlYxxypsXe65EWqU9Db/bjF0qz5c311 0alw== X-Gm-Message-State: AOJu0YwRAM9DpTKTI6JyDt5ustr5DE4vYLF7J7gGHHdsvF1u1LAutmiX rwBkcIjDKaZ4dc5o+YzOAwHyfIgLbo+PcBrvafoMBB4ej+l5nEtFSd9oXw== X-Received: by 2002:a05:6214:3a8c:b0:6c7:c81e:15f5 with SMTP id 6a1803df08f44-6c7c81e160fmr146552566d6.4.1727109312792; Mon, 23 Sep 2024 09:35:12 -0700 (PDT) Received: from localhost.localdomain ([181.92.233.116]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6c75e44c044sm48481066d6.27.2024.09.23.09.35.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Sep 2024 09:35:12 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 23 Sep 2024 13:35:35 -0300 Message-ID: <20240923163535.12074-1-jamrial@gmail.com> X-Mailer: git-send-email 2.46.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/hevcdec: add support for sps_infer_scaling_list_flag == 1 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: vsHyccmLuMNf Signed-off-by: James Almer --- Untested, as i can't find a sample that triggers this code. libavcodec/hevc/cabac.c | 3 ++- libavcodec/hevc/ps.c | 18 +++++++++++++----- libavcodec/hevc/ps.h | 1 + 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/libavcodec/hevc/cabac.c b/libavcodec/hevc/cabac.c index 892dd1c215..ac2b52986e 100644 --- a/libavcodec/hevc/cabac.c +++ b/libavcodec/hevc/cabac.c @@ -1084,8 +1084,9 @@ void ff_hevc_hls_residual_coding(HEVCLocalContext *lc, const HEVCPPS *pps, dc_scale = 16; if (sps->scaling_list_enabled && !(transform_skip_flag && log2_trafo_size > 2)) { + const HEVCLayerContext *const l = &s->layers[sps->sps_scaling_list_ref_layer_id]; const ScalingList *sl = pps->scaling_list_data_present_flag ? - &pps->scaling_list : &sps->scaling_list; + &pps->scaling_list : &l->sps->scaling_list; int matrix_id = lc->cu.pred_mode != MODE_INTRA; matrix_id = 3 * matrix_id + c_idx; diff --git a/libavcodec/hevc/ps.c b/libavcodec/hevc/ps.c index f18b88489b..64b3089967 100644 --- a/libavcodec/hevc/ps.c +++ b/libavcodec/hevc/ps.c @@ -1373,14 +1373,22 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, sps->scaling_list_enabled = get_bits1(gb); if (sps->scaling_list_enabled) { + int sps_infer_scaling_list_flag = 0; + set_default_scaling_list_data(&sps->scaling_list); - if (multi_layer_ext && get_bits1(gb)) { // sps_infer_scaling_list_flag - av_log(avctx, AV_LOG_ERROR, "sps_infer_scaling_list_flag=1 not supported\n"); - return AVERROR_PATCHWELCOME; - } + if (multi_layer_ext) + sps_infer_scaling_list_flag = get_bits1(gb); - if (get_bits1(gb)) { + sps->sps_scaling_list_ref_layer_id = 0; + if (sps_infer_scaling_list_flag) { + sps->sps_scaling_list_ref_layer_id = get_bits(gb, 6); + if (sps->sps_scaling_list_ref_layer_id >= HEVC_VPS_MAX_LAYERS) { + av_log(avctx, AV_LOG_ERROR, "Invalid value %d for sps_scaling_list_ref_layer_id", + sps->sps_scaling_list_ref_layer_id); + return AVERROR_INVALIDDATA; + } + } else if (get_bits1(gb)) { ret = scaling_list_data(gb, avctx, &sps->scaling_list, sps); if (ret < 0) return ret; diff --git a/libavcodec/hevc/ps.h b/libavcodec/hevc/ps.h index 6f5b1f8755..aa4326554c 100644 --- a/libavcodec/hevc/ps.h +++ b/libavcodec/hevc/ps.h @@ -277,6 +277,7 @@ typedef struct HEVCSPS { VUI vui; PTL ptl; + int sps_scaling_list_ref_layer_id; ScalingList scaling_list; unsigned int nb_st_rps;