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 C56594ACCA for ; Thu, 20 Feb 2025 17:25:53 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 27C3068C575; Thu, 20 Feb 2025 19:25:39 +0200 (EET) Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 07B6768C255 for ; Thu, 20 Feb 2025 19:25:32 +0200 (EET) Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-2fcc940bb14so1846064a91.3 for ; Thu, 20 Feb 2025 09:25:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740072329; x=1740677129; 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=8E1lruNP5vJmbwNFB8jNl446knCxmds6Bsfjv21vrz4=; b=anShv28Ym8W2hQCene/hnDtf9QFeJ14oATCIK+gI4DeUH+o6yYf/JUXtZhoNwNyi7p G6/K4WGab75T/vc32dCl9MQ2dmOZSs0xCRbPX6tD2NoU6MVTQ5HdHcnxugvsjZb5Enue c037M5SCdfiihJGktNplzqMrH76BqS5NpaEMetUtquRCPD5pNlP0RTRylUyw410IxArD Ys+M+p3bLw9NZPECRV2XFOo4e3d3JsEJKW9J6mhzyqqpwIip3lorwg3lN+G+0Mzhqmpr 618bQ8Yd5EgQrMMl8C0mCw+0xZ46z1970nC2j4+95OW0rrM9II7hVihOb2G3cXd/+zdw tB1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740072329; x=1740677129; 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=8E1lruNP5vJmbwNFB8jNl446knCxmds6Bsfjv21vrz4=; b=PVa43F66oJw1cLoR8jbPYPV3ZYVzZUgkm3/KQBlVTWsYkKAFJBlgEmfhtTmPZVXzFo jGEFCrwKSisqmlYRxOW9hcsRxRO7SPQFqG6CVO0v5ffvWkmUS1kCTZlZc2CkL6t0V6l8 M2rAE1lGKS+X4Ugog+/ZIEzSt0kfDqn801Sy1KIA06d//lJIIr/SyavnZusMC+gvItKR thMssMquPxdhkgV0KqAIUdGMBGAuqowrqOky6RkLi7haqbkoVKDWyLZQ73+oarp6iVxn uYoabDOSO1tM4OsOi4MJQCuuAwlSoeGG+6HRGddeMWU7lC6jxPkcnJ2gjtSN+lUnnNGt t43w== X-Gm-Message-State: AOJu0YyqHep++qflwzkY0Z1xUIOGkpf6RK+I8oFFhOL2ZJ1SAlLb5AQo UCEJv7w4AJ92DYllsyf2HgmyDQ2yVW0pOueOp3IduHwPMuABVa4/nF3JYmF0 X-Gm-Gg: ASbGnctMF9d4coZDIUITA3qm9499fKoNCbwA3RFAIga8uwZDVxwRcFHUTxMh0A3FG4H cn57Uu3Da5cmhtM3Y/O0ZLj6OI9FtWcvFlrM/6V1PtxR6RVzl6I09hZo0qn1qYxZfQN8AUVjtL2 vmRn3HZLI6VjdtScD84GoLqZAMXMVogwPH+ec3H6sBEvx7T7HQ8dDWGWE/I5zSjFR1zexLceu6r B2n3tMhzI0zWn+aa+m2RRoCVvJCa/OxIFE0/rBoG6/YqOuB4U0D4c/HNAA7k2udU9VwK1x6BkdD vz78JOZ8nMJW2z7D1sHLPYoiagNtGQ== X-Google-Smtp-Source: AGHT+IHRgYUl7b1PoTKf8ZbwfWsBVk32UZkzLJc98vanpxQHo0NHlA/2K8/My8BNeKPuEfDHRoBt/w== X-Received: by 2002:a17:90b:3bc4:b0:2ee:6d08:7936 with SMTP id 98e67ed59e1d1-2fcd0ca378cmr5320241a91.20.1740072329383; Thu, 20 Feb 2025 09:25:29 -0800 (PST) Received: from localhost.localdomain ([2800:2121:b040:c:84e:2829:1051:10a6]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fcb0c5357csm4336202a91.27.2025.02.20.09.25.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 09:25:28 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 20 Feb 2025 14:24:46 -0300 Message-ID: <20250220172454.2952-3-jamrial@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250220172454.2952-1-jamrial@gmail.com> References: <20250220172454.2952-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/11] avutil/frame: add functions to check and ensure a side data entry is writable 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: Signed-off-by: James Almer --- libavutil/frame.h | 19 +++++++++++++++++++ libavutil/side_data.c | 25 +++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/libavutil/frame.h b/libavutil/frame.h index 49260ae2dd..a707b35087 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -1211,6 +1211,25 @@ void av_frame_side_data_remove(AVFrameSideData ***sd, int *nb_sd, void av_frame_side_data_remove_by_props(AVFrameSideData ***sd, int *nb_sd, int props); +/** + * Check whether the data described by a given AVFrameSideData can be + * written to. + * + * @return 1 if the caller may write to the data, 0 otherwise. + */ +int av_frame_side_data_is_writable(const AVFrameSideData *sd); + +/** + * Create a writable reference for the data described by a given + * AVFrameSideData, avoiding data copy if possible. + * + * @param sd Side data whose data should be made writable. + * + * @return 0 on success, a negative AVERROR on failure. On failure, the + * side data is unchanged. + */ +int av_frame_side_data_make_writable(AVFrameSideData *sd); + /** * @} */ diff --git a/libavutil/side_data.c b/libavutil/side_data.c index 8c57fd838a..beb8ea3212 100644 --- a/libavutil/side_data.c +++ b/libavutil/side_data.c @@ -315,3 +315,28 @@ const AVFrameSideData *av_frame_side_data_get_c(const AVFrameSideData * const *s } return NULL; } + +int av_frame_side_data_is_writable(const AVFrameSideData *sd) +{ + return !!av_buffer_is_writable(sd->buf); +} + +int av_frame_side_data_make_writable(AVFrameSideData *sd) +{ + AVBufferRef *buf = NULL; + + if (av_buffer_is_writable(sd->buf)) + return 0; + + buf = av_buffer_alloc(sd->size); + if (!buf) + return AVERROR(ENOMEM); + + if (sd->size) + memcpy(buf->data, sd->data, sd->size); + av_buffer_unref(&sd->buf); + sd->buf = buf; + sd->data = buf->data; + + return 0; +} -- 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".