[FFmpeg-devel] [PATCH 4/4] fftools/cmdutils: Use av_dynarray_add_nofree()

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Fri Dec 3 20:28:55 EET 2021


Simplifies code and reduces the number of allocations a bit
by overallocating.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
 fftools/cmdutils.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
index 0b57552e5c..3c8e5a82cd 100644
--- a/fftools/cmdutils.c
+++ b/fftools/cmdutils.c
@@ -2216,19 +2216,13 @@ void *grow_array(void *array, int elem_size, int *size, int new_size)
 
 void *allocate_array_elem(void *ptr, size_t elem_size, int *nb_elems)
 {
-    void *new_elem, **array;
+    void *new_elem;
 
-    memcpy(&array, ptr, sizeof(array));
-    if (*nb_elems == INT_MAX) {
-        av_log(NULL, AV_LOG_ERROR, "Array too big.\n");
+    if (!(new_elem = av_mallocz(elem_size)) ||
+        av_dynarray_add_nofree(ptr, nb_elems, new_elem) < 0) {
+        av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n");
         exit_program(1);
     }
-    new_elem = av_mallocz(elem_size);
-    if (!new_elem)
-        exit_program(1);
-    GROW_ARRAY(array, *nb_elems);
-    memcpy(ptr, &array, sizeof(array));
-    array[*nb_elems - 1] = new_elem;
     return new_elem;
 }
 
-- 
2.32.0



More information about the ffmpeg-devel mailing list