Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Niklas Haas <ffmpeg@haasn.xyz>
To: ffmpeg-devel@ffmpeg.org
Cc: Niklas Haas <git@haasn.dev>
Subject: [FFmpeg-devel] [PATCH v5 06/19] avutil/mem: add av_dynarray2_dup
Date: Tue, 10 Jun 2025 15:04:57 +0200
Message-ID: <20250610131042.200918-7-ffmpeg@haasn.xyz> (raw)
In-Reply-To: <20250610131042.200918-1-ffmpeg@haasn.xyz>

From: Niklas Haas <git@haasn.dev>

Like av_memdup() but correctly rounds up to the nearest power of two so that
av_dynarray2_add() will continue to work on the duplicated list.
---
 libavutil/mem.c |  9 +++++++++
 libavutil/mem.h | 14 ++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/libavutil/mem.c b/libavutil/mem.c
index b205d3fb25..2ed4553069 100644
--- a/libavutil/mem.c
+++ b/libavutil/mem.c
@@ -39,6 +39,7 @@
 
 #include "attributes.h"
 #include "avassert.h"
+#include "common.h"
 #include "dynarray.h"
 #include "error.h"
 #include "internal.h"
@@ -358,6 +359,14 @@ void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size,
     return tab_elem_data;
 }
 
+void *av_dynarray2_dup(void *tab, int nb, size_t elem_size)
+{
+    if (nb)
+        nb = 1 << av_ceil_log2(nb);
+
+    return av_memdup(tab, nb * elem_size);
+}
+
 static void fill16(uint8_t *dst, int len)
 {
     uint32_t v = AV_RN16(dst - 2);
diff --git a/libavutil/mem.h b/libavutil/mem.h
index ab7648ac57..7815327a88 100644
--- a/libavutil/mem.h
+++ b/libavutil/mem.h
@@ -562,6 +562,20 @@ int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem);
 void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size,
                        const uint8_t *elem_data);
 
+/**
+ * Duplicate an array allocated by `av_dynarray2_add`. Preserves the size of
+ * the underlying allocation, so that the returned array can be again modified
+ * using `av_dynarray2_add`.
+ *
+ * @param[in] tab       Pointer to the array to duplicate
+ * @param[in] nb        Number of elements in the array
+ * @param[in] elem_size Size in bytes of an element in the array
+ *
+ * @return Pointer to the newly allocated array, or `NULL` on failure.
+ * @see av_dynarray2_add()
+ */
+void *av_dynarray2_dup(void *tab, int nb, size_t elem_size);
+
 /**
  * @}
  */
-- 
2.49.0

_______________________________________________
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".

  parent reply	other threads:[~2025-06-10 13:12 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-10 13:04 [FFmpeg-devel] [PATCH v5 00/19] swscale: new ops framework Niklas Haas
2025-06-10 13:04 ` [FFmpeg-devel] [PATCH v5 01/19] swscale/graph: pass per-pass image pointers to setup() Niklas Haas
2025-06-10 13:04 ` [FFmpeg-devel] [PATCH v5 02/19] swscale/format: rename legacy format conversion table Niklas Haas
2025-06-10 13:04 ` [FFmpeg-devel] [PATCH v5 03/19] swscale/format: add ff_fmt_clear() Niklas Haas
2025-06-10 13:04 ` [FFmpeg-devel] [PATCH v5 04/19] tests/checkasm: increase number of runs in between measurements Niklas Haas
2025-06-10 13:04 ` [FFmpeg-devel] [PATCH v5 05/19] tests/checkasm: generalize DEF_CHECKASM_CHECK_FUNC to floats Niklas Haas
2025-06-10 13:04 ` Niklas Haas [this message]
2025-06-10 13:19   ` [FFmpeg-devel] [PATCH v5 06/19] avutil/mem: add av_dynarray2_dup Niklas Haas
2025-06-10 13:55     ` Andreas Rheinhardt
2025-06-10 14:41       ` Niklas Haas
2025-06-10 14:54         ` Andreas Rheinhardt
2025-06-10 13:04 ` [FFmpeg-devel] [PATCH v5 07/19] swscale: add SWS_UNSTABLE flag Niklas Haas
2025-06-10 13:04 ` [FFmpeg-devel] [PATCH v5 08/19] swscale/ops: introduce new low level framework Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 09/19] swscale/optimizer: add high-level ops optimizer Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 10/19] swscale/ops_internal: add internal ops backend API Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 11/19] swscale/ops: add dispatch layer Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 12/19] swscale/optimizer: add packed shuffle solver Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 13/19] swscale/ops_chain: add internal abstraction for kernel linking Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 14/19] swscale/ops_backend: add reference backend basend on C templates Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 15/19] swscale/ops_memcpy: add 'memcpy' backend for plane->plane copies Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 16/19] swscale/x86: add SIMD backend Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 17/19] tests/checkasm: add checkasm tests for swscale ops Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 18/19] swscale/format: add new format decode/encode logic Niklas Haas
2025-06-10 13:05 ` [FFmpeg-devel] [PATCH v5 19/19] swscale/graph: allow experimental use of new format handler Niklas Haas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250610131042.200918-7-ffmpeg@haasn.xyz \
    --to=ffmpeg@haasn.xyz \
    --cc=ffmpeg-devel@ffmpeg.org \
    --cc=git@haasn.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git