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 299A34C1D7 for ; Thu, 6 Feb 2025 02:50:53 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 56E1A68B9EF; Thu, 6 Feb 2025 04:50:49 +0200 (EET) Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0C4A668B8A0 for ; Thu, 6 Feb 2025 04:50:43 +0200 (EET) Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-21670dce0a7so10780605ad.1 for ; Wed, 05 Feb 2025 18:50:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738810240; x=1739415040; 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=3wrq+y3urmbLSSlxTCJh5ipno+JuF6mW6qJE+K01Z6o=; b=CJtVNW8AoJJOEc2igQ/bFUZU/laIgD7E9i9sZKMKszEZQolMeysBCeBVEVdi2EB3jX T35MW0ojznnRKp7lF1cHC/A8P1OLWRh1mnPVPmThuCWVxZJwH0P/jLGVHq5A1Xovp+XS DlBtEdoApuDugw92fyJsi3wFbrKToCd2nttZ9gPzx6Vsq4r5iwQc16+GyhuuR86/+jVU CYovMBGZM2ICDjsZQbj8Ag34I8md1R+av8a8wtdQeGymQLOcDEfO6Qkutv3/Gns6Kux3 Tug3pg83+r+ocNr1L7kqqx/9mxyp0qZBN4y2LqMmQf6RoUC/tzcTTbNAmXAPPkMvOg0o j80g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738810240; x=1739415040; 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=3wrq+y3urmbLSSlxTCJh5ipno+JuF6mW6qJE+K01Z6o=; b=n81TpEYHJtGNhndOe5GqOSbFj2Y2UjA6lKc/gNG5Qa6ugt8fsyzfUIumrX0wLgYeFr /pMC1UqftJcmtNHpyATQUvD0w926jtK9kvhmc8dpgkdwMGhVdlPVIf3c/wsGHa+IFkFl PrI11N4DD4zJKqbnhvRWsFV3vTqZu0i3a/Kr/oz+B9kQcKI83Yln8DAN+gB74ZYDUB8Q chIynsOI++NcJwFAJ2tvhAAI8umlrfWQTA3kukQg9h8PKLO/IxFnccJGUoxHsJc1sLLv Ws12STXz5Ah5t/TkG/pR+USNO22W100BvL0oCHJ90poEzsRp8T9voXYV65VRaQPJkMwg 2LNA== X-Gm-Message-State: AOJu0Yw6BcMn08FuQFwo4udR1vtZKWT1ACD50ywT9unFwLIroFGyKQGL 3cCT8Z1FxDOMZ/11P5fUbTVBoY18pA4X903BFnngTk1raDtBnVjRAzV6/GAb X-Gm-Gg: ASbGncu3b0BjqtFoukq8oJe/qgGGm68nvtpKSUYyGyolcKXbxL7zDLTl/B37V08qxEf 8ox3g+GWVMxKgewuq6Ae/hL6ql/eFmYNY/EWJSjp4/G5oRRW4zEZbONAdYnJANEjqveAzhEVvDF ivkzoGw+TOZ6qhZu68JV94uv8eMFW53plw4RCVdrczMv337vDSDNKqeSKup4KpDdlHALQgRN0Zq biBiGu1wmxYAJT5uGn1cVRg7TvsVRWD/iTFjUIpUQufl9rMyY1W8lBlyOvhzUqBw+mW+HWTvCbb 713EdGTGEUtm2Ryrk5r4Vz9MjPPkKVU= X-Google-Smtp-Source: AGHT+IFH3sOqgRIivNx0JTXJWKyjESyVxzTB0pKY5NGHarXDrt/6V77tlzRlFq+uNke6Riu01Cmhbg== X-Received: by 2002:a05:6a21:6d8e:b0:1e8:a374:cee6 with SMTP id adf61e73a8af0-1ede87fbcb8mr9259966637.6.1738810240497; Wed, 05 Feb 2025 18:50:40 -0800 (PST) Received: from localhost.localdomain ([2800:2121:b040:c:885:43e5:919a:16cf]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ad51aecd209sm134214a12.22.2025.02.05.18.50.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Feb 2025 18:50:39 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 5 Feb 2025 23:50:17 -0300 Message-ID: <20250206025017.14046-1-jamrial@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250206015614.GJ4991@pb2> References: <20250206015614.GJ4991@pb2> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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. Signed-off-by: James Almer --- Fixed segfaults. libavcodec/hevc/hevcdec.c | 10 +++++----- libavcodec/hevc/refs.c | 4 ++-- libavcodec/hevc/sei.c | 6 +++++- libavcodec/hevc/sei.h | 6 +++++- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c index e9c045f7a1..881538fb91 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; @@ -444,7 +444,7 @@ static int export_multilayer(HEVCContext *s, const HEVCVPS *vps) if (!s->view_ids_available) return AVERROR(ENOMEM); - if (tdrdi->num_ref_displays) { + if (tdrdi && tdrdi->num_ref_displays) { s->view_pos_available = av_calloc(vps->nb_layers, sizeof(*s->view_pos_available)); if (!s->view_pos_available) return AVERROR(ENOMEM); @@ -454,9 +454,9 @@ static int export_multilayer(HEVCContext *s, const HEVCVPS *vps) s->view_ids_available[i] = vps->view_id[i]; if (s->view_pos_available) { - s->view_pos_available[i] = vps->view_id[i] == tdrdi->left_view_id[0] ? + s->view_pos_available[i] = tdrdi && (vps->view_id[i] == tdrdi->left_view_id[0]) ? AV_STEREO3D_VIEW_LEFT : - vps->view_id[i] == tdrdi->right_view_id[0] ? + tdrdi && (vps->view_id[i] == tdrdi->right_view_id[0]) ? AV_STEREO3D_VIEW_RIGHT : AV_STEREO3D_VIEW_UNSPEC; } } @@ -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".