[FFmpeg-cvslog] af_compand: replace strtok_r() with av_get_token()

Anton Khirnov git at videolan.org
Tue Mar 4 00:22:38 CET 2014


ffmpeg | branch: release/2.2 | Anton Khirnov <anton at khirnov.net> | Wed Feb 26 22:37:06 2014 +0100| [00d5ff64315adb18847ba5bd830c49f37a95df36] | committer: Reinhard Tartler

af_compand: replace strtok_r() with av_get_token()

(cherry picked from commit bc6461c2861b7d482a037d3b3e2b44ad48805fa0)

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

 configure                |    1 -
 libavfilter/af_compand.c |   32 ++++++++++++++++++++++++--------
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/configure b/configure
index 8ece5eb..4c35ab9 100755
--- a/configure
+++ b/configure
@@ -2008,7 +2008,6 @@ unix_protocol_select="network"
 # filters
 blackframe_filter_deps="gpl"
 boxblur_filter_deps="gpl"
-compand_filter_deps="strtok_r"
 cropdetect_filter_deps="gpl"
 delogo_filter_deps="gpl"
 drawtext_filter_deps="libfreetype"
diff --git a/libavfilter/af_compand.c b/libavfilter/af_compand.c
index 1906594..a6692bc 100644
--- a/libavfilter/af_compand.c
+++ b/libavfilter/af_compand.c
@@ -29,6 +29,7 @@
 
 #include <string.h>
 
+#include "libavutil/avstring.h"
 #include "libavutil/channel_layout.h"
 #include "libavutil/common.h"
 #include "libavutil/mathematics.h"
@@ -330,7 +331,7 @@ static int config_output(AVFilterLink *outlink)
     CompandContext *s     = ctx->priv;
     const int sample_rate = outlink->sample_rate;
     double radius         = s->curve_dB * M_LN10 / 20.0;
-    char *p, *saveptr     = NULL;
+    const char *p;
     const int channels    =
         av_get_channel_layout_nb_channels(outlink->channel_layout);
     int nb_attacks, nb_decays, nb_points;
@@ -368,25 +369,34 @@ static int config_output(AVFilterLink *outlink)
 
     p = s->attacks;
     for (i = 0, new_nb_items = 0; i < nb_attacks; i++) {
-        char *tstr = strtok_r(p, "|", &saveptr);
-        p = NULL;
+        char *tstr = av_get_token(&p, "|");
+        if (!tstr)
+            return AVERROR(ENOMEM);
+
         new_nb_items += sscanf(tstr, "%f", &s->channels[i].attack) == 1;
+        av_freep(&tstr);
         if (s->channels[i].attack < 0) {
             uninit(ctx);
             return AVERROR(EINVAL);
         }
+        if (*p)
+            p++;
     }
     nb_attacks = new_nb_items;
 
     p = s->decays;
     for (i = 0, new_nb_items = 0; i < nb_decays; i++) {
-        char *tstr = strtok_r(p, "|", &saveptr);
-        p = NULL;
+        char *tstr = av_get_token(&p, "|");
+        if (!tstr)
+            return AVERROR(ENOMEM);
         new_nb_items += sscanf(tstr, "%f", &s->channels[i].decay) == 1;
+        av_freep(&tstr);
         if (s->channels[i].decay < 0) {
             uninit(ctx);
             return AVERROR(EINVAL);
         }
+        if (*p)
+            p++;
     }
     nb_decays = new_nb_items;
 
@@ -401,9 +411,13 @@ static int config_output(AVFilterLink *outlink)
 #define S(x) s->segments[2 * ((x) + 1)]
     p = s->points;
     for (i = 0, new_nb_items = 0; i < nb_points; i++) {
-        char *tstr = strtok_r(p, "|", &saveptr);
-        p = NULL;
-        if (sscanf(tstr, "%f/%f", &S(i).x, &S(i).y) != 2) {
+        char *tstr = av_get_token(&p, "|");
+        if (!tstr)
+            return AVERROR(ENOMEM);
+
+        err = sscanf(tstr, "%f/%f", &S(i).x, &S(i).y);
+        av_freep(&tstr);
+        if (err != 2) {
             av_log(ctx, AV_LOG_ERROR,
                     "Invalid and/or missing input/output value.\n");
             uninit(ctx);
@@ -418,6 +432,8 @@ static int config_output(AVFilterLink *outlink)
         S(i).y -= S(i).x;
         av_log(ctx, AV_LOG_DEBUG, "%d: x=%f y=%f\n", i, S(i).x, S(i).y);
         new_nb_items++;
+        if (*p)
+            p++;
     }
     num = new_nb_items;
 



More information about the ffmpeg-cvslog mailing list