From patchwork Wed Mar 20 23:35:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 47273 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a4a:b0:1a3:31a3:7958 with SMTP id zu10csp228914pzb; Wed, 20 Mar 2024 16:42:25 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU3IUdLmFQdoTUEL+KOJFznAKeeHQfuznK5Ou8o49oq9qnRcXDNj+/oBIA1rXGSWm1Kqcy2Xz0mf8mIUSqnCwxTmtMC1vnGgdxZ5Q== X-Google-Smtp-Source: AGHT+IE2cnr25VcnHRwmKsozd8Rb0lNqIguxxVu7JppmgeBNI5dGtidI+MwD9STyOOrGxsBvHFHL X-Received: by 2002:a2e:9b93:0:b0:2d3:364c:2620 with SMTP id z19-20020a2e9b93000000b002d3364c2620mr1919342lji.1.1710978145260; Wed, 20 Mar 2024 16:42:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1710978145; cv=none; d=google.com; s=arc-20160816; b=PqBF0qCj2JaR2SExMf96lUmreH9JhPo2vomuV+V+z81pscGPSqE4qONpQrYNQwNiNQ ZWe7JDNR/4wXC8VQPnhnZbdo5f6PZnl9iQC4s0Bo+wFmzhG0gs3pI+3fWI3K5rMMXhby 1g1X/6QIEqSXQdlDGuLxRXAYHDSjVjJjGePnUMEJxAscLkedAB/9vmUPDbbZJAX6xMAK FdQSgGNxFaOWHG+W5C24CVU1fNnZCLWp40VS9+yhJ/xMLD0+QeZWZO0tBQ7W+a6f0R9Q otYoaEJKkmNHd372NLNq5qgIaHyfAE9yeR8ZckZoA5GOfiA2ee5Wl9IT8IVTn0OgoB3G 361A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=wj/G0GrhBR/N4KdiESNWRzj6x5ojANTJjDegYEaHSX0=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=XESdzkvAgQiL2PY4gc67gzZoCpfZkjEkHCnrcppPST9eBe1k7MoHVJBmKr2EfGfTWG Hm3TeTlOqPsmB9SKiIKVIDJStYwbqRQrztxW28DFiVPhfTqaMJaxRzsVi/sJ6RjWIkku C7+98Qubtn+AbANvhgLP4obnRZ/JzAUJqnqQOf/L1vv8ub2NrwNqQ1A86C6v5RDUNcnt 8d9wmsjPwSu/77RMkzIoRowUxKhRePqicd15PBwxcdN3sqgA2++LuVE/GtyjVi0VvNyh 3Z4vUttYt0L2U9cb8UtxproArWgWOIthSXBmz1vpWw/yNWe5eTUpijIDUAm/t1WiOint iDXg==; 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=nkaZMMVY; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ds1-20020a0564021cc100b005688537e44asi6907944edb.488.2024.03.20.16.42.24; Wed, 20 Mar 2024 16:42:25 -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=nkaZMMVY; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F3CE768D517; Thu, 21 Mar 2024 01:42:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f178.google.com (mail-qt1-f178.google.com [209.85.160.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8119E68D4D9 for ; Thu, 21 Mar 2024 01:42:14 +0200 (EET) Received: by mail-qt1-f178.google.com with SMTP id d75a77b69052e-42f2d02fbdeso1951021cf.1 for ; Wed, 20 Mar 2024 16:42:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710978132; x=1711582932; 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=CndJQYU19G524G1PImXKdPwH+MtJfxR0PomtCccROYU=; b=nkaZMMVYNEu3G/lHlc9pwH/5OkcCXF5s3CArevXbkmhpx+Qvggd5ez5PhThEIjPpKU t06HP/ZWcHv+/INt3692xWEClcSgrM5ExYSaIcStVviNPywhGUY2M38DQToO+EmDbP23 T0PJhGWFmtAxDEMeMzZnx2o5HGLsMP+BUDHb+V4zo7tv0PPnJQjDda826YMV7YCWjHRr KI0qBUxMFhXPPypG4w5ZqU+Cvb0jvNOboz2my1Z536sl6+qi8Ge4Tq1qYdjHbejfLQpN 9ULyD8Iqx6T2lrRIh4QpQfJyN+KnMb8H73Alp/YZBbBtk7kVQVciyknyL4y1u+V+Q9R0 yq7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710978132; x=1711582932; 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=CndJQYU19G524G1PImXKdPwH+MtJfxR0PomtCccROYU=; b=me3gAzZ2huVyuejUIxyQ34lvYV0+gZqA3v3rHfqtmuB9lhbq8aGOZw66ygBwW6Jxgk P6K7Pu2VJwjIUxRD2IkByG7Wrh4qyGQw80VJaUfn0w1jTWQrU2LuJEFPaYwKbLGBU9kv mB464D+9KXLaIeFuNn07+kH8YTIiOORyQSmD9aHeRMGxSkeLMsSdvK8V8al4JtmVx/k7 0onoKmIlWRvf3r62pkU4JW1Z52XxrLLK1dd60wfity63bWVdA7O/+V6O2yFSR3B934+s Qc0FSlpJ3Hb22X5NI6VzIVZl0KtrglH7+P+6r9keYbyDNjxaabxQqAveVpI5lx8ZeLFU l3xQ== X-Gm-Message-State: AOJu0YwDKc40PS6cpr2vp8xtWpb1f/4H7U1AOTDe7llKc/MWS+oZDCOm MQcaqJbeHI7Zok8g0p4qn2qFWfsP39EIAnlNA+1hyu+DuzipKB1DvQpq2IwV X-Received: by 2002:a05:6a20:2446:b0:1a3:6b43:6191 with SMTP id t6-20020a056a20244600b001a36b436191mr4128713pzc.15.1710977718502; Wed, 20 Mar 2024 16:35:18 -0700 (PDT) Received: from localhost.localdomain ([190.194.167.233]) by smtp.gmail.com with ESMTPSA id t22-20020a170902b21600b001ddd5e158bdsm8497095plr.284.2024.03.20.16.35.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Mar 2024 16:35:18 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 20 Mar 2024 20:35:25 -0300 Message-ID: <20240320233525.29361-1-jamrial@gmail.com> X-Mailer: git-send-email 2.44.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/hevc_ps: allocate only the required HEVCHdrParams within a VPS 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: JAvtWhbhPSQY Signed-off-by: James Almer --- libavcodec/hevc_ps.c | 17 +++++++++++++++-- libavcodec/hevc_ps.h | 2 +- libavcodec/vulkan_hevc.c | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index 20ceb09829..d3edc0810d 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -442,13 +442,21 @@ static int decode_hrd(GetBitContext *gb, int common_inf_present, return 0; } +static void uninit_vps(FFRefStructOpaque opaque, void *obj) +{ + HEVCVPS *vps = obj; + + for (int i = 0; i < vps->vps_num_hrd_parameters; i++) + ff_refstruct_unref(&vps->hdr[i]); +} + int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx, HEVCParamSets *ps) { int i,j; int vps_id = 0; ptrdiff_t nal_size; - HEVCVPS *vps = ff_refstruct_allocz(sizeof(*vps)); + HEVCVPS *vps = ff_refstruct_alloc_ext(sizeof(*vps), 0, NULL, uninit_vps); if (!vps) return AVERROR(ENOMEM); @@ -538,12 +546,17 @@ int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx, goto err; } for (i = 0; i < vps->vps_num_hrd_parameters; i++) { + HEVCHdrParams *hdr = ff_refstruct_allocz(sizeof(*hdr)); int common_inf_present = 1; + if (!hdr) + return AVERROR(ENOMEM); + get_ue_golomb_long(gb); // hrd_layer_set_idx if (i) common_inf_present = get_bits1(gb); - decode_hrd(gb, common_inf_present, &vps->hdr[i], + + decode_hrd(gb, common_inf_present, hdr, vps->vps_max_sub_layers); } } diff --git a/libavcodec/hevc_ps.h b/libavcodec/hevc_ps.h index 9cdec9b6c1..ff94f90a5e 100644 --- a/libavcodec/hevc_ps.h +++ b/libavcodec/hevc_ps.h @@ -150,7 +150,7 @@ typedef struct PTL { typedef struct HEVCVPS { unsigned int vps_id; - HEVCHdrParams hdr[HEVC_MAX_LAYER_SETS]; + HEVCHdrParams *hdr[HEVC_MAX_LAYER_SETS]; uint8_t vps_temporal_id_nesting_flag : 1; uint8_t vps_sub_layer_ordering_info_present_flag : 1; diff --git a/libavcodec/vulkan_hevc.c b/libavcodec/vulkan_hevc.c index 239bff75e5..a89d09a372 100644 --- a/libavcodec/vulkan_hevc.c +++ b/libavcodec/vulkan_hevc.c @@ -563,7 +563,7 @@ static void set_vps(const HEVCVPS *vps, HEVCHeaderVPSSet sls[]) { for (int i = 0; i < vps->vps_num_hrd_parameters; i++) { - const HEVCHdrParams *src = &vps->hdr[i]; + const HEVCHdrParams *src = vps->hdr[i]; sls_hdr[i] = (StdVideoH265HrdParameters) { .flags = (StdVideoH265HrdFlags) {