From patchwork Fri Jun 7 13:01:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 49640 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:c209:0:b0:460:55fa:d5ed with SMTP id d9csp1008434vqo; Fri, 7 Jun 2024 06:04:12 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW4N+GQ+YGTmHyUg8CSAVnEwsCAlILDMFuHhFDKhtgLtZpdcJii4b0TkQRTBnk843e7+i5c9epr0tDNK8J6JxRjDWrfroj10j82GA== X-Google-Smtp-Source: AGHT+IH4GxLtJNIMFQvoePV5ixseSKqtZh6CIMAKk/bt2aBWFxnXa16iJ01+Y5xBoshJRzpL+ozl X-Received: by 2002:a50:cc92:0:b0:57c:60fe:96dc with SMTP id 4fb4d7f45d1cf-57c60fe9780mr515343a12.19.1717765452423; Fri, 07 Jun 2024 06:04:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717765452; cv=none; d=google.com; s=arc-20160816; b=W8zLWWQmDBU2B4KwyvraEoIkdLRO03oEue8b5q0Wu3Ad1iZKgbEQuMLxAVoKn7OICi OTMJMpYzc/SGiJdl68E1XEQCfCpnmFs+Ahawy86N+y6SJM92EiWg9e55ZD+VwJEFqcEe YkFYjT3OZyxLjFa5aPXKq8S/f9aQEcrMFr5wHDbw0p4ViFtGTvs7yhP3TBegwlRWTuBX 0nT+fzVx5vyClPo17HSh7Yk7tg8+0nLl3Wk9kwz4sLEoPBfL354l2H7XhvyKDs7GPDdx Yo4W6j0zR9pbxMo8MJPjTDRyehPIsCL9mFo40/hw8kOo7tiTf+tf19Yj3q4HDaoVsboZ IOkQ== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=iheBgqyLXEs1IVVEv42GLyVz1v/YZANr2cTJoRIFHbQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=ZWdn+Yjla0N55PhoIoSYJ5W8zB6gnxExw46r2GLLopuCBiUnirIQ7/BgJEFQSv+WVu ffGmDpSZ7tvMXqpvUV1TiHVwRDRuRzZFJppmDGkGvCTb0OKv5/Xj49GPo2wanrnOD6hm yIZO1KpvqnapiEhPuKNRN9tKKvlXKk20lrWE/Z9X/JO6awL4jXqfG8eJDE6WXv3VddT8 b9agDHtTVSfFoe6JdXtclxGSgsN7i4mwDKj11BfojhKame0EmzqQ3MuGs1wn/sjq0TEM kNJoveb6aU4dkiuzxsOKAsOwPXynSPmWAb6T1Kldq4iE9oD1sQ0d/3BYAhPSK3BGm4W9 wZzQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=YCbsaUOb; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-57aae0c4c22si1856746a12.107.2024.06.07.06.04.11; Fri, 07 Jun 2024 06:04:12 -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=@khirnov.net header.s=mail header.b=YCbsaUOb; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2B0E468D776; Fri, 7 Jun 2024 16:03:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7016968D761 for ; Fri, 7 Jun 2024 16:03:44 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=YCbsaUOb; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id D82264D42 for ; Fri, 7 Jun 2024 15:03:43 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id uKS0oCrveeEK for ; Fri, 7 Jun 2024 15:03:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1717765421; bh=2cbH0xSnNnvHnqmJP8liWIHG6QA0MCbL2zRjF9OoT8k=; h=From:To:Subject:Date:In-Reply-To:References:From; b=YCbsaUOb/oKQgcQNKKGBXvUjAdWiMcuXUIGu+IzScZafwKW9JuBXStIwW0NiYXMJ7 yeTa3thTL7FslAZpXby3D4HDezKO9gCb58uDRqJ+9gmuzPm8umEZB4HnFLvAtmwHkt 6HefUz+o+HHC+zPluqMT9Ps8btSaDDUs8pXZF7wmTCzj12XmcEsIMRJcHdDtVfs41p FbJIRXyY1yTEt8mWDlPUwHBV7FNqlKZyXz1yX1InaQD1HIZQS0yXgR9C1FE2sENClv E0PT30JRCpp0pCu4C5QGlmepa+w2MuYZX/ziV2Fob5cWwXYWImQ4DDb4iiDiD0QBZ/ xg4K5pI4SNt3Q== Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail1.khirnov.net (Postfix) with ESMTPS id 600094DA7 for ; Fri, 7 Jun 2024 15:03:41 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 724573A065C for ; Fri, 07 Jun 2024 15:03:34 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 7 Jun 2024 15:01:00 +0200 Message-ID: <20240607130135.9088-4-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240607130135.9088-1-anton@khirnov.net> References: <20240607130135.9088-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/39] lavc/hevc_ps: make PPS hold a reference to its SPS 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: t1bwRYSiSkXU PPS depends on, and is parsed for, specific SPS data. This will be useful in following commits. --- libavcodec/hevc/hevcdec.c | 4 ++-- libavcodec/hevc/parser.c | 8 ++------ libavcodec/hevc/ps.c | 4 ++++ libavcodec/hevc/ps.h | 2 ++ 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c index 46db7923fe..ae4a5888e5 100644 --- a/libavcodec/hevc/hevcdec.c +++ b/libavcodec/hevc/hevcdec.c @@ -625,8 +625,8 @@ static int hls_slice_header(HEVCContext *s, GetBitContext *gb) if (s->nal_unit_type == HEVC_NAL_CRA_NUT && s->last_eos == 1) sh->no_output_of_prior_pics_flag = 1; - if (s->ps.sps != s->ps.sps_list[s->ps.pps->sps_id]) { - const HEVCSPS *sps = s->ps.sps_list[s->ps.pps->sps_id]; + if (s->ps.sps != s->ps.pps->sps) { + const HEVCSPS *sps = s->ps.pps->sps; enum AVPixelFormat pix_fmt; ff_hevc_clear_refs(s); diff --git a/libavcodec/hevc/parser.c b/libavcodec/hevc/parser.c index 056e1b4aa4..d0d5e7fbc2 100644 --- a/libavcodec/hevc/parser.c +++ b/libavcodec/hevc/parser.c @@ -80,12 +80,8 @@ static int hevc_parse_slice_header(AVCodecParserContext *s, H2645NAL *nal, } ps->pps = ps->pps_list[pps_id]; - if (ps->pps->sps_id >= HEVC_MAX_SPS_COUNT || !ps->sps_list[ps->pps->sps_id]) { - av_log(avctx, AV_LOG_ERROR, "SPS id out of range: %d\n", ps->pps->sps_id); - return AVERROR_INVALIDDATA; - } - if (ps->sps != ps->sps_list[ps->pps->sps_id]) { - ps->sps = ps->sps_list[ps->pps->sps_id]; + if (ps->sps != ps->pps->sps) { + ps->sps = ps->pps->sps; ps->vps = ps->vps_list[ps->sps->vps_id]; } ow = &ps->sps->output_window; diff --git a/libavcodec/hevc/ps.c b/libavcodec/hevc/ps.c index 2dd4f834a4..98217e337b 100644 --- a/libavcodec/hevc/ps.c +++ b/libavcodec/hevc/ps.c @@ -1363,6 +1363,8 @@ static void hevc_pps_free(FFRefStructOpaque unused, void *obj) { HEVCPPS *pps = obj; + ff_refstruct_unref(&pps->sps); + av_freep(&pps->column_width); av_freep(&pps->row_height); av_freep(&pps->col_bd); @@ -1828,6 +1830,8 @@ int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx, sps = ps->sps_list[pps->sps_id]; vps = ps->vps_list[sps->vps_id]; + pps->sps = ff_refstruct_ref_c(sps); + pps->dependent_slice_segments_enabled_flag = get_bits1(gb); pps->output_flag_present_flag = get_bits1(gb); pps->num_extra_slice_header_bits = get_bits(gb, 3); diff --git a/libavcodec/hevc/ps.h b/libavcodec/hevc/ps.h index 99d70cefd2..7c9aacf057 100644 --- a/libavcodec/hevc/ps.h +++ b/libavcodec/hevc/ps.h @@ -437,6 +437,8 @@ typedef struct HEVCPPS { uint8_t *data; int data_size; + + const HEVCSPS *sps; ///< RefStruct reference } HEVCPPS; typedef struct HEVCParamSets {