aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMuhammad Faiz <mfcc64@gmail.com>2016-10-17 06:12:18 +0700
committerMuhammad Faiz <mfcc64@gmail.com>2016-10-18 00:47:42 +0700
commit92de89d14acbb8160147dc9e7a62c2a4fd6423da (patch)
tree3718c564596d5b90af68c9470141f6be56a0254c
parentdf9b151a1bdc439a600bfe67ec02844f9cc3d803 (diff)
downloadffmpeg-92de89d14acbb8160147dc9e7a62c2a4fd6423da.tar.gz
avfilter/firequalizer: optimize gain/gain_entry command
do not rebuild when gain/gain_entry command are equal with old gain/gain_entry Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
-rw-r--r--libavfilter/af_firequalizer.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/libavfilter/af_firequalizer.c b/libavfilter/af_firequalizer.c
index 78d776713c..aed3e2821e 100644
--- a/libavfilter/af_firequalizer.c
+++ b/libavfilter/af_firequalizer.c
@@ -453,6 +453,9 @@ static int generate_kernel(AVFilterContext *ctx, const char *gain, const char *g
return 0;
}
+#define SELECT_GAIN(s) (s->gain_cmd ? s->gain_cmd : s->gain)
+#define SELECT_GAIN_ENTRY(s) (s->gain_entry_cmd ? s->gain_entry_cmd : s->gain_entry)
+
static int config_input(AVFilterLink *inlink)
{
AVFilterContext *ctx = inlink->dst;
@@ -510,8 +513,7 @@ static int config_input(AVFilterLink *inlink)
if (s->fixed)
inlink->min_samples = inlink->max_samples = inlink->partial_buf_size = s->nsamples_max;
- return generate_kernel(ctx, s->gain_cmd ? s->gain_cmd : s->gain,
- s->gain_entry_cmd ? s->gain_entry_cmd : s->gain_entry);
+ return generate_kernel(ctx, SELECT_GAIN(s), SELECT_GAIN_ENTRY(s));
}
static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
@@ -567,11 +569,16 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
if (!strcmp(cmd, "gain")) {
char *gain_cmd;
+ if (SELECT_GAIN(s) && !strcmp(SELECT_GAIN(s), args)) {
+ av_log(ctx, AV_LOG_DEBUG, "equal gain, do not rebuild.\n");
+ return 0;
+ }
+
gain_cmd = av_strdup(args);
if (!gain_cmd)
return AVERROR(ENOMEM);
- ret = generate_kernel(ctx, gain_cmd, s->gain_entry_cmd ? s->gain_entry_cmd : s->gain_entry);
+ ret = generate_kernel(ctx, gain_cmd, SELECT_GAIN_ENTRY(s));
if (ret >= 0) {
av_freep(&s->gain_cmd);
s->gain_cmd = gain_cmd;
@@ -581,11 +588,16 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
} else if (!strcmp(cmd, "gain_entry")) {
char *gain_entry_cmd;
+ if (SELECT_GAIN_ENTRY(s) && !strcmp(SELECT_GAIN_ENTRY(s), args)) {
+ av_log(ctx, AV_LOG_DEBUG, "equal gain_entry, do not rebuild.\n");
+ return 0;
+ }
+
gain_entry_cmd = av_strdup(args);
if (!gain_entry_cmd)
return AVERROR(ENOMEM);
- ret = generate_kernel(ctx, s->gain_cmd ? s->gain_cmd : s->gain, gain_entry_cmd);
+ ret = generate_kernel(ctx, SELECT_GAIN(s), gain_entry_cmd);
if (ret >= 0) {
av_freep(&s->gain_entry_cmd);
s->gain_entry_cmd = gain_entry_cmd;