Ping :)

On 06/12/2016 08:17 PM, sebechlebsky...@gmail.com wrote:
From: Jan Sebechlebsky <sebechlebsky...@gmail.com>

Signed-off-by: Jan Sebechlebsky <sebechlebsky...@gmail.com>
---
  libavformat/tee.c | 24 +++++++++++++++---------
  1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/libavformat/tee.c b/libavformat/tee.c
index 806beaa..bf7438c 100644
--- a/libavformat/tee.c
+++ b/libavformat/tee.c
@@ -27,8 +27,6 @@
  #include "avformat.h"
  #include "avio_internal.h"
-#define MAX_SLAVES 16
-
  typedef enum {
      ON_SLAVE_FAILURE_ABORT  = 1,
      ON_SLAVE_FAILURE_IGNORE = 2
@@ -52,7 +50,7 @@ typedef struct TeeContext {
      const AVClass *class;
      unsigned nb_slaves;
      unsigned nb_alive;
-    TeeSlave slaves[MAX_SLAVES];
+    TeeSlave *slaves;
  } TeeContext;
static const char *const slave_delim = "|";
@@ -203,6 +201,7 @@ static void close_slaves(AVFormatContext *avf)
      for (i = 0; i < tee->nb_slaves; i++) {
          close_slave(&tee->slaves[i]);
      }
+    av_freep(&tee->slaves);
  }
static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave)
@@ -443,17 +442,17 @@ static int tee_write_header(AVFormatContext *avf)
      TeeContext *tee = avf->priv_data;
      unsigned nb_slaves = 0, i;
      const char *filename = avf->filename;
-    char *slaves[MAX_SLAVES];
+    char **slaves = NULL;
      int ret;
while (*filename) {
-        if (nb_slaves == MAX_SLAVES) {
-            av_log(avf, AV_LOG_ERROR, "Maximum %d slave muxers reached.\n",
-                   MAX_SLAVES);
-            ret = AVERROR_PATCHWELCOME;
+        char *slave = av_get_token(&filename, slave_delim);
+        if (!slave) {
+            ret = AVERROR(ENOMEM);
              goto fail;
          }
-        if (!(slaves[nb_slaves++] = av_get_token(&filename, slave_delim))) {
+        dynarray_add(&slaves, &nb_slaves, slave);
+        if (!slaves) {
              ret = AVERROR(ENOMEM);
              goto fail;
          }
@@ -461,6 +460,10 @@ static int tee_write_header(AVFormatContext *avf)
              filename++;
      }
+ if (!(tee->slaves = av_mallocz_array(nb_slaves, sizeof(*tee->slaves)))) {
+        ret = AVERROR(ENOMEM);
+        goto fail;
+    }
      tee->nb_slaves = tee->nb_alive = nb_slaves;
for (i = 0; i < nb_slaves; i++) {
@@ -483,12 +486,14 @@ static int tee_write_header(AVFormatContext *avf)
              av_log(avf, AV_LOG_WARNING, "Input stream #%d is not mapped "
                     "to any slave.\n", i);
      }
+    av_free(slaves);
      return 0;
fail:
      for (i = 0; i < nb_slaves; i++)
          av_freep(&slaves[i]);
      close_slaves(avf);
+    av_free(slaves);
      return ret;
  }
@@ -505,6 +510,7 @@ static int tee_write_trailer(AVFormatContext *avf)
                  ret_all = ret;
          }
      }
+    av_freep(&tee->slaves);
      return ret_all;
  }

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to