From bc6461c2861b7d482a037d3b3e2b44ad48805fa0 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 26 Feb 2014 22:37:06 +0100 Subject: [PATCH] af_compand: replace strtok_r() with av_get_token() --- configure | 1 - libavfilter/af_compand.c | 32 ++++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/configure b/configure index 56f453bff3..b1433359e6 100755 --- a/configure +++ b/configure @@ -2015,7 +2015,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 19065944f9..a6692bc37f 100644 --- a/libavfilter/af_compand.c +++ b/libavfilter/af_compand.c @@ -29,6 +29,7 @@ #include +#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;