From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 0A1164BE26 for ; Mon, 3 Feb 2025 22:37:25 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5941968B4B4; Tue, 4 Feb 2025 00:36:50 +0200 (EET) Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AE0AC68B480 for ; Tue, 4 Feb 2025 00:36:44 +0200 (EET) Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-215770613dbso66519575ad.2 for ; Mon, 03 Feb 2025 14:36:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738622202; x=1739227002; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=dG5CGZ8QYKkFz2jxNk2FYRWpsCDzce9Wd0zYbtIBmkc=; b=l+w/Oc/BewCfDsicclJ7SvVDz7XcZnlVFj5cGn1+3myTBpc3iLX2Fb3MbaoCiGHS0p dUJkr7gUaI24oeNiTL/KEBj5TLzFPTmPdBpgdcSeMwZfGChyex1Rr4+lQXGWNtFx1zzT luB/7mM00dsaYrqIzXp3gcx/vtmprkPoo2354yUpC1V7hEokP3zTHLKIG6rUMkQ0HagD mrlFbc+/wNHidYr5NPtOShZP/dad7OGGxskdtjc9chp/dCxgufpi81/j8IhHtBQ03C/y pIPKddclXaX+nJYnJSVub2gul8ERMpq6AgUK4WKHWeL6g2QXKi51Bjm4igp1qfsrilDJ dJaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738622202; x=1739227002; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dG5CGZ8QYKkFz2jxNk2FYRWpsCDzce9Wd0zYbtIBmkc=; b=rZAGgKTPYk23StPfUNUSSjiTglUoLtlfl9oXR+AkIsetma1GxTGfRVAMXTibcFrf1B Ektt/+XiTCqJXw6SYaIVoxSyTSo70xiEos8M76Fesyhcm3Pma1Mb7aRUA1zCVbq+q7uf z96mSeOhoboQnCLjreKa2PyVqDl9RHC10bP6wL8t9cpu9MjeuW4wXmmgmq2SK02Pt5tD wiYSXD2kJf1IxO+E+2UweyIFWbDHqREdAktknG12+f60SHPXMF6BCHkk2fSI6TTikmZm R5Kx4ZMwiaNqGMpD49L3+Tg++qIbvbkVB0oMoc/TqWnlulmX1MrzOVXBBuI+L/spE4SY E3iQ== X-Gm-Message-State: AOJu0YyJLl+dzoWRBpuxKYTh3Vp5Up+HriubVt5hol9p+EleIEfNkgyn TvbvM9pK8ESnyzEIc90mkMKcNgwqVSShspDrM/2OD1ldpHqgisU2RiudhwEI X-Gm-Gg: ASbGncsPr3vePqa+BrdjA8E7O6IiLavvgxOI4/xrn6GlvDLD+G9D7VkSM2uL3UYWuWR ircXyyAh4gyVysAEkPryTwr90KxAU+Adhyi+ibJknbHDgJc0z4ZWwhcRFWugTlPF/En6OTj5OUE gPrcmhLZ0G6JM6Z/IhI/MrwA/bZwzaByJiVzDpMi3kKZSZW0g9O6g79Q7VVTab/P7dl1nCDDaKb fM5hBQ6JQcHEG9oGHZX+Plc3mBOHLpKF3yVcg3GJ2CDNUa1mDFZnb4E+J/4MBbk75uFesmAekVp JJnpSiQ/A5FR6EuHhbN+Of6I39FoTvU= X-Google-Smtp-Source: AGHT+IFX31bY1f0Dggwh10JTtu/v7hikshRykvC6Voexwydk5S3PrPykzjPwenQKiayBjFkhBy5u8A== X-Received: by 2002:a05:6a21:9015:b0:1db:e464:7b69 with SMTP id adf61e73a8af0-1ed7a5383fdmr36103641637.20.1738622202022; Mon, 03 Feb 2025 14:36:42 -0800 (PST) Received: from localhost.localdomain ([2800:2121:b040:c:7d9c:3d76:2afc:cc38]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ad11841ec59sm5154543a12.57.2025.02.03.14.36.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Feb 2025 14:36:41 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 Feb 2025 19:35:45 -0300 Message-ID: <20250203223546.12224-5-jamrial@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250203223546.12224-1-jamrial@gmail.com> References: <20250203223546.12224-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/6] avcodec/hevc/sei: dynamically allocate 3D Reference Displays Information SEI messages 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Considerably reduces the size of HEVCSEI and eliminates data copy between threads. Signed-off-by: James Almer --- libavcodec/hevc/hevcdec.c | 4 ++-- libavcodec/hevc/refs.c | 4 ++-- libavcodec/hevc/sei.c | 6 +++++- libavcodec/hevc/sei.h | 6 +++++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c index e9c045f7a1..f9ff22dbac 100644 --- a/libavcodec/hevc/hevcdec.c +++ b/libavcodec/hevc/hevcdec.c @@ -429,7 +429,7 @@ FF_ENABLE_DEPRECATION_WARNINGS static int export_multilayer(HEVCContext *s, const HEVCVPS *vps) { - const HEVCSEITDRDI *tdrdi = &s->sei.tdrdi; + const HEVCSEITDRDI *tdrdi = s->sei.tdrdi; av_freep(&s->view_ids_available); s->nb_view_ids_available = 0; @@ -4015,7 +4015,7 @@ static int hevc_update_thread_context(AVCodecContext *dst, s->sei.common.frame_packing = s0->sei.common.frame_packing; s->sei.common.display_orientation = s0->sei.common.display_orientation; s->sei.common.alternative_transfer = s0->sei.common.alternative_transfer; - s->sei.tdrdi = s0->sei.tdrdi; + av_refstruct_replace(&s->sei.tdrdi, s0->sei.tdrdi); return 0; } diff --git a/libavcodec/hevc/refs.c b/libavcodec/hevc/refs.c index dd7f7f95a8..d1d2f27a9b 100644 --- a/libavcodec/hevc/refs.c +++ b/libavcodec/hevc/refs.c @@ -104,7 +104,7 @@ static HEVCFrame *alloc_frame(HEVCContext *s, HEVCLayerContext *l) // add view ID side data if it's nontrivial if (vps->nb_layers > 1 || view_id) { - HEVCSEITDRDI *tdrdi = &s->sei.tdrdi; + HEVCSEITDRDI *tdrdi = s->sei.tdrdi; AVFrameSideData *sd = av_frame_side_data_new(&frame->f->side_data, &frame->f->nb_side_data, AV_FRAME_DATA_VIEW_ID, @@ -113,7 +113,7 @@ static HEVCFrame *alloc_frame(HEVCContext *s, HEVCLayerContext *l) goto fail; *(int*)sd->data = view_id; - if (tdrdi->num_ref_displays) { + if (tdrdi && tdrdi->num_ref_displays) { AVStereo3D *stereo_3d; stereo_3d = av_stereo3d_create_side_data(frame->f); diff --git a/libavcodec/hevc/sei.c b/libavcodec/hevc/sei.c index 8793d86fdc..588516043b 100644 --- a/libavcodec/hevc/sei.c +++ b/libavcodec/hevc/sei.c @@ -220,7 +220,11 @@ static int decode_nal_sei_prefix(GetBitContext *gb, GetByteContext *gbyte, case SEI_TYPE_TIME_CODE: return decode_nal_sei_timecode(&s->timecode, gb); case SEI_TYPE_THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO: - return decode_nal_sei_3d_reference_displays_info(&s->tdrdi, gb); + av_refstruct_unref(&s->tdrdi); + s->tdrdi = av_refstruct_allocz(sizeof(*s->tdrdi)); + if (!s->tdrdi) + return AVERROR(ENOMEM); + return decode_nal_sei_3d_reference_displays_info(s->tdrdi, gb); default: { int ret = ff_h2645_sei_message_decode(&s->common, type, AV_CODEC_ID_HEVC, gb, gbyte, logctx); diff --git a/libavcodec/hevc/sei.h b/libavcodec/hevc/sei.h index ee640003bc..42ee6a20b7 100644 --- a/libavcodec/hevc/sei.h +++ b/libavcodec/hevc/sei.h @@ -24,6 +24,7 @@ #include #include "libavutil/buffer.h" +#include "libavutil/refstruct.h" #include "libavcodec/get_bits.h" #include "libavcodec/h2645_sei.h" @@ -101,7 +102,9 @@ typedef struct HEVCSEI { HEVCSEIPictureTiming picture_timing; int active_seq_parameter_set_id; HEVCSEITimeCode timecode; - HEVCSEITDRDI tdrdi; + + // Dynamic allocations due to large size. + HEVCSEITDRDI *tdrdi; } HEVCSEI; struct HEVCParamSets; @@ -118,6 +121,7 @@ int ff_hevc_decode_nal_sei(GetBitContext *gb, void *logctx, HEVCSEI *s, */ static inline void ff_hevc_reset_sei(HEVCSEI *sei) { + av_refstruct_unref(&sei->tdrdi); ff_h2645_sei_reset(&sei->common); } -- 2.48.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".