[FFmpeg-cvslog] lavfi/amerge: fix input pad name behaviour.

Clément Bœsch git at videolan.org
Tue Sep 11 14:53:59 CEST 2012


ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Tue Sep 11 06:41:55 2012 +0200| [7b56dddd565438e5c9a9bfcd0a55e087ce0800fe] | committer: Clément Bœsch

lavfi/amerge: fix input pad name behaviour.

This fixes two problems:
 - the invalid pad.name stack pointer after init() ends
 - the duplicated name for all inputs

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7b56dddd565438e5c9a9bfcd0a55e087ce0800fe
---

 libavfilter/af_amerge.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/libavfilter/af_amerge.c b/libavfilter/af_amerge.c
index 542f8a6..1ff3c8c 100644
--- a/libavfilter/af_amerge.c
+++ b/libavfilter/af_amerge.c
@@ -24,6 +24,7 @@
  */
 
 #include "libavutil/audioconvert.h"
+#include "libavutil/avstring.h"
 #include "libavutil/bprint.h"
 #include "libavutil/opt.h"
 #include "libswresample/swresample.h" // only for SWR_CH_MAX
@@ -61,8 +62,10 @@ static av_cold void uninit(AVFilterContext *ctx)
     AMergeContext *am = ctx->priv;
     int i;
 
-    for (i = 0; i < am->nb_inputs; i++)
+    for (i = 0; i < am->nb_inputs; i++) {
         ff_bufqueue_discard_all(&am->in[i].queue);
+        av_freep(&ctx->input_pads[i].name);
+    }
     av_freep(&am->in);
 }
 
@@ -293,7 +296,6 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
 {
     AMergeContext *am = ctx->priv;
     int ret, i;
-    char name[16];
 
     am->class = &amerge_class;
     av_opt_set_defaults(am);
@@ -306,13 +308,15 @@ static av_cold int init(AVFilterContext *ctx, const char *args)
     if (!am->in)
         return AVERROR(ENOMEM);
     for (i = 0; i < am->nb_inputs; i++) {
+        char *name = av_asprintf("in%d", i);
+        if (!name)
+            return AVERROR(ENOMEM);
         AVFilterPad pad = {
             .name             = name,
             .type             = AVMEDIA_TYPE_AUDIO,
             .filter_samples   = filter_samples,
             .min_perms        = AV_PERM_READ | AV_PERM_PRESERVE,
         };
-        snprintf(name, sizeof(name), "in%d", i);
         ff_insert_inpad(ctx, i, &pad);
     }
     return 0;



More information about the ffmpeg-cvslog mailing list