This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 5ebd50415fe2f62b49126ad2bd46a726c8a85438
Author:     James Almer <[email protected]>
AuthorDate: Fri Mar 13 20:03:20 2026 -0300
Commit:     James Almer <[email protected]>
CommitDate: Sun Mar 15 19:27:01 2026 -0300

    avcodec/bsf/extract_extradata: reallocate buffers with the final used size
    
    The buffers are allocated using the worst case scenario of the entire NALU
    being written, when this is in many times not the case.
    
    Signed-off-by: James Almer <[email protected]>
---
 libavcodec/bsf/extract_extradata.c | 32 +++++++++++++++++++++++---------
 1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/libavcodec/bsf/extract_extradata.c 
b/libavcodec/bsf/extract_extradata.c
index aee1642f84..14c9428b70 100644
--- a/libavcodec/bsf/extract_extradata.c
+++ b/libavcodec/bsf/extract_extradata.c
@@ -391,11 +391,9 @@ static int extract_extradata_lcevc(AVBSFContext *ctx, 
AVPacket *pkt,
         uint8_t *extradata;
 
         if (s->remove) {
-            filtered_buf = av_buffer_alloc(filtered_size + 
AV_INPUT_BUFFER_PADDING_SIZE);
-            if (!filtered_buf) {
-                return AVERROR(ENOMEM);
-            }
-            memset(filtered_buf->data + filtered_size, 0, 
AV_INPUT_BUFFER_PADDING_SIZE);
+            ret = av_buffer_realloc(&filtered_buf, filtered_size + 
AV_INPUT_BUFFER_PADDING_SIZE);
+            if (ret < 0)
+                return ret;
         }
 
         extradata = av_malloc(extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
@@ -440,17 +438,33 @@ static int extract_extradata_lcevc(AVBSFContext *ctx, 
AVPacket *pkt,
                 bytestream2_put_bufferu(&pb_filtered_data, nal->raw_data, 
nal->raw_size);
             }
         }
-        *data = extradata;
-        *size = bytestream2_tell_p(&pb_extradata);
-        av_assert0(*size <= extradata_size);
+        av_assert0(bytestream2_tell_p(&pb_extradata) <= extradata_size);
+        extradata_size = bytestream2_tell_p(&pb_extradata);
+        ret = av_reallocp(&extradata, extradata_size + 
AV_INPUT_BUFFER_PADDING_SIZE);
+        if (ret < 0) {
+            av_buffer_unref(&filtered_buf);
+            return ret;
+        }
+        memset(extradata + extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
 
         if (s->remove) {
             av_assert0(bytestream2_tell_p(&pb_filtered_data) <= filtered_size);
+            filtered_size = bytestream2_tell_p(&pb_filtered_data);
+            ret = av_buffer_realloc(&filtered_buf, filtered_size + 
AV_INPUT_BUFFER_PADDING_SIZE);
+            if (ret < 0) {
+                av_buffer_unref(&filtered_buf);
+                av_freep(&extradata);
+                return ret;
+            }
+            memset(filtered_buf->data + filtered_size, 0, 
AV_INPUT_BUFFER_PADDING_SIZE);
             av_buffer_unref(&pkt->buf);
             pkt->buf  = filtered_buf;
             pkt->data = filtered_buf->data;
-            pkt->size = bytestream2_tell_p(&pb_filtered_data);
+            pkt->size = filtered_size;
         }
+
+        *data = extradata;
+        *size = extradata_size;
     }
 
     return 0;

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to