[FFmpeg-devel] [PATCH 29/36] avcodec/movsub_bsf: Remove intermediate packet

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Sat May 30 19:05:34 EEST 2020


This commit ends using separate packets for in- and output. Instead,
the input is read directly into the packet destined for output via
ff_bsf_get_packet_ref() and only the buffer-related fields are modified;
the others are not touched.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
---
 libavcodec/movsub_bsf.c | 22 +++++++++-------------
 1 file changed, 9 insertions(+), 13 deletions(-)

diff --git a/libavcodec/movsub_bsf.c b/libavcodec/movsub_bsf.c
index 6e29fa8e50..b5b714ce7e 100644
--- a/libavcodec/movsub_bsf.c
+++ b/libavcodec/movsub_bsf.c
@@ -23,37 +23,33 @@
 #include "bsf.h"
 #include "bsf_internal.h"
 
-static int text2movsub(AVBSFContext *ctx, AVPacket *out)
+static int text2movsub(AVBSFContext *ctx, AVPacket *pkt)
 {
-    AVPacket *in;
+    AVBufferRef *out = NULL;
     int ret = 0;
 
-    ret = ff_bsf_get_packet(ctx, &in);
+    ret = ff_bsf_get_packet_ref(ctx, pkt);
     if (ret < 0)
         return ret;
 
-    if (in->size > 0xffff) {
+    if (pkt->size > 0xffff) {
         ret = AVERROR_INVALIDDATA;
         goto fail;
     }
 
-    ret = av_new_packet(out, in->size + 2);
+    ret = ff_buffer_padded_realloc(&out, pkt->size + 2);
     if (ret < 0) {
-        ret = AVERROR(ENOMEM);
         goto fail;
     }
 
-    ret = av_packet_copy_props(out, in);
-    if (ret < 0)
-        goto fail;
+    AV_WB16(out->data, pkt->size);
+    memcpy(out->data + 2, pkt->data, pkt->size);
 
-    AV_WB16(out->data, in->size);
-    memcpy(out->data + 2, in->data, in->size);
+    ff_packet_replace_buffer(pkt, out);
 
 fail:
     if (ret < 0)
-        av_packet_unref(out);
-    av_packet_free(&in);
+        av_packet_unref(pkt);
     return ret;
 }
 
-- 
2.20.1



More information about the ffmpeg-devel mailing list