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 82A214CC78 for ; Sat, 25 Jan 2025 20:22:59 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E4E1868B981; Sat, 25 Jan 2025 22:22:14 +0200 (EET) Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8258768B8CD for ; Sat, 25 Jan 2025 22:22:06 +0200 (EET) Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2163b0c09afso60112345ad.0 for ; Sat, 25 Jan 2025 12:22:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737836524; x=1738441324; 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=eAA8qynEmrXhWbPJuOv9ea30ksoBhp+5X49f6ud+qCI=; b=SvkQXy2k+EspMtSwjDwVjm6dOAJE174kYGNQ1AcelhbtF+24Pq8VK1UIcVDbSs7lwf MvbeAewtXNg96cAWKFpCjm4w6av/FrmRwxYMdj22eYciG9oPRT0UMjfhGtRGFKv0xPQ5 t+Zl7vVg2mGhaU69fwPnDdnphpWSYbYPx9pMyz5tjJh2XVm82vTnLfpdfSMbW1MtIU10 3K6eNXicnuzfMpwyMdXqmesfaqv0bnk653Al9XA44+GX75CbvxRXCUsIXwpTkDFId8sY e298QM1nfmK2f2+M8qAeSVr8bhahZUCmVCuPMuYLmUaxRqYBkVMKDD3V4GFeZ+0+q3F0 fMlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737836524; x=1738441324; 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=eAA8qynEmrXhWbPJuOv9ea30ksoBhp+5X49f6ud+qCI=; b=bGYEvaGVBwIAHhU2nlO8pptRF0KKlbDU4gVaU/ASE8RJcSlSA0caqCrut7YcbVwgLR 9VzgnjbCCiKiJqtFXfvWq5zC7Olfs6OWsT/y0V/cXMEAN4rYUywvSvsGEHo+RucbzcGM aM1kP5K2UpI5IiOmWZqYIH0psMW5ne+ScnlxVhdG7QFnG/pquXexk4J951naKio7GXat dl7TIPqC1Fv77170Jhp0GX5AXROHtY/bPBz/LG4zgSIxrsNzXbUvLY4vtQUX7RQM/ANx eadwkc9RFtL93VANrcbcRHMFDV8HG/KWz9+eQzG7J7Rio1NpxBbuWHGoOQveVO6vwHrY 7tAg== X-Gm-Message-State: AOJu0Yzfc/5BhIIHt5WAlNIrLx9Jbz4qIlvebpcmAT/GVEew+LSJRCN0 Kts6dU94Ealz4E3UZ+uF3ln3WpF3eb7yiZyTHssiyE/zOBBUj/g4870zDA== X-Gm-Gg: ASbGncvrq1qdgj+ETP0b1JL6mFkSWSIOsj/LEuArVNMt+e9BYWpQ3HyJJbxtEt0ETPb gyeQ4c4EmieAVoAGP7/BH8EowSS9qa/+T3J55adHZaqb1jcgCA2kaPBimyYxFN4ug+j6U12LLsO 86CqI/7iJgeFo8hrsa6/UvpKQFb7g39aid2B3KSmK+ALjDStHspOGKDcp7rbTrUh89FVvLyTWPq Ki8mQUzKT12ZEAqum7iCZmtsbXiXtTVnF9xvpcSBbBcdqyY4Bz3jsueny4uK6flkU5ZyO8oYu9v yxJiV39xa1zTwcTVVVhMMg== X-Google-Smtp-Source: AGHT+IGKwjnPkTg7gvNtnMecNlNjYozdThmUKfNPATWTqbHI5IsDvtojYJjCxTzI5YQ1Vzv3yAhU6w== X-Received: by 2002:a17:902:eccd:b0:216:410d:4c67 with SMTP id d9443c01a7336-21c355c8efbmr580180695ad.41.1737836523912; Sat, 25 Jan 2025 12:22:03 -0800 (PST) Received: from localhost.localdomain ([2800:2121:b040:c:f188:b333:21cc:e83f]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21da3ea396asm36155335ad.91.2025.01.25.12.22.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Jan 2025 12:22:03 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 Jan 2025 17:21:33 -0300 Message-ID: <20250125202143.12126-5-jamrial@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250125202143.12126-1-jamrial@gmail.com> References: <20250125202143.12126-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/14] 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 | 45 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/libavutil/frame.h b/libavutil/frame.h index 019adaac0e..aa4e619ad2 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -1207,6 +1207,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 7be1c346cd..8fb9dfed2b 100644 --- a/libavutil/side_data.c +++ b/libavutil/side_data.c @@ -369,3 +369,48 @@ const AVFrameSideData *av_frame_side_data_get_c(const AVFrameSideData * const *s } return NULL; } + +int av_frame_side_data_is_writable(const AVFrameSideData *sd) +{ +#if FF_API_SIDE_DATA_BUF +FF_DISABLE_DEPRECATION_WARNINGS + return !!av_buffer_is_writable(sd->buf); +#else + const FFFrameSideData *sdp = csdp_from_sd(sd); + return !!av_buffer_is_writable(sdp->buf); +#endif +} + +int av_frame_side_data_make_writable(AVFrameSideData *sd) +{ + FFFrameSideData *sdp = sdp_from_sd(sd); + AVBufferRef *buf = NULL; + +#if FF_API_SIDE_DATA_BUF +FF_DISABLE_DEPRECATION_WARNINGS + if (av_buffer_is_writable(sd->buf)) +FF_ENABLE_DEPRECATION_WARNINGS +#else + if (av_buffer_is_writable(sdp->buf)) +#endif + return 0; + + buf = av_buffer_alloc(sd->size); + if (!buf) + return AVERROR(ENOMEM); + + if (sd->size) + memcpy(buf->data, sd->data, sd->size); +#if FF_API_SIDE_DATA_BUF +FF_DISABLE_DEPRECATION_WARNINGS + av_buffer_unref(&sd->buf); + sd->buf = buf; +FF_ENABLE_DEPRECATION_WARNINGS +#else + av_buffer_unref(&sdp->buf); + sdp->buf = buf; +#endif + 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".