Nicolas George (2026-05-13):
> OTOH, adding a brand new field in all contexts for this features…
> this feature better be very important.
libavfilter supports cyclic filter graphs. Without cmd_visited the BFS
traversal loops forever on such graphs. It is a single int per filter
context; I do not see a cheaper way to guarantee termination.
> I am not seeing the string /doc/ in the whole patchset
You are right, that was missing. Fixed now ― doc/filters.texi and
doc/APIchanges are included in the updated series.
> it needs an example that shows something made possible by this
> feature, something that was not previously possible with different
> means.
Here is a concrete example:
ffmpeg -f lavfi -i sine=440:d=3 -filter_complex \
"[0:a]asendcmd=mode=forward:commands='1.0 volume@v1 volume 0.5',\
volume@v1=1.0,volume@v2=1.0,aformat=sample_fmts=s16[out]" \
-map "[out]" -y /tmp/out.wav
The chain is: asendcmd → volume@v1 → volume@v2 → aformat → out.
At t=1s the command starts at v1 and propagates forward (downstream).
Both v1 and v2 receive "volume 0.5", so the output amplitude becomes
0.25 (0.5 × 0.5).
Why existing mechanisms cannot do this:
1. avfilter_graph_send_command("volume@v1", "volume", "0.5", FLAG_ONE)
― sets v1 only, does not touch v2.
2. avfilter_graph_send_command("volume", "volume", "0.5", 0)
― sets every volume filter in the graph, including unrelated paths.
3. There is no existing call that means "set this parameter on v1 and
propagate to everything downstream of it that understands the
command."
For the library API the case is even clearer: ffplay's
configure_audio_filters() parses the user's -af string and only holds
the source/sink pointers. The intermediate filter names are whatever
the parser generated. If it wanted to adjust volume at runtime it has
no way to target a specific subgraph without manually walking the
links ― which is exactly what AVFILTER_CMD_FLAG_FORWARD does
internally.
Updated patch series attached.
Zhanquan
________________________________
发件人: Nicolas George <[email protected]>
发送时间: 2026年5月13日 21:19
收件人: 岑湛权
抄送: FFmpeg development discussions and patches
主题: Re: 答复: [External Mail][FFmpeg-devel] Re: [PATCH] avfilter: enhance command
processing with chain propagation and direction control. (PR #20731)
[外部邮件] 此邮件来源于小米公司外部,请谨慎处理。若对邮件安全性存疑,请将邮件转发给[email protected]进行反馈
Hi. I am not finding the time or courage to address this properly,
especially with the unreadable discussion existing in the web monster.
So I will only give short comments to this mail.
岑湛权 (HE12026-03-03):
> Resolution: FFmpeg's scheduler performs cycle detection via
> DFS during initialization (ffmpeg_sched.c:1435-1508). Cyclic
> graphs are rejected outright at runtime, so infinite recursion
> cannot occur. As documented in ffmpeg.texi, feedback patterns
> must use multiple independent filter graphs, not cycles within
> a single graph.
libavfilter is supposed to support cyclic paths.
If the new fftools code does broke that… insert the “surprised Pikachu”
animated gif here. But that is only the fftools code.
OTOH, adding a brand new field in all contexts for this features… this
feature better be very important.
> 2) Nicolas George (you) requested a patch series with real
> examples demonstrating the use case.
>
> Resolution: Commit 2 was added, extending sendcmd/asendcmd
> with the mode option and accompanying FATE tests.
That is not enough.
To begin with, you are adding options, but I am not seeing the string
/doc/ in the whole patchset, that is an immediate reject.
Not only does the feature need to be documented, it needs to prove its
usefulness: it needs an example that shows something made possible by
this feature, something that was not previously possible with different
means.
Regards,
--
Nicolas George
From 3021e672347462f71f2fb446cbf02e681367595c Mon Sep 17 00:00:00 2001
From: cenzhanquan1 <[email protected]>
Date: Tue, 19 May 2026 15:03:36 +0800
Subject: [PATCH v2 1/2] avfilter: enhance command processing with subgraph
propagation and direction control
Add two new flags for directional command propagation in filter graphs:
AVFILTER_CMD_FLAG_FORWARD: propagate command along data flow direction
through output links to downstream filters.
AVFILTER_CMD_FLAG_BACKWARD: propagate command against data flow direction
through input links to upstream filters.
avfilter_process_command() is extended with iterative BFS traversal when
either flag is set. A cmd_visited flag in FFFilterContext prevents infinite
loops in cyclic graphs. FORWARD/BACKWARD are rejected by graph-level
command functions (avfilter_graph_send_command/queue_command) since subgraph
traversal is only meaningful starting from a specific filter.
Bump LIBAVFILTER_VERSION_MINOR for the new public API flags.
Signed-off-by: cenzhanquan1 <[email protected]>
---
doc/APIchanges | 3 +
libavfilter/avfilter.c | 125 ++++++++++++++++++++++++++++----
libavfilter/avfilter.h | 10 ++-
libavfilter/avfilter_internal.h | 6 ++
libavfilter/avfiltergraph.c | 6 ++
libavfilter/version.h | 2 +-
6 files changed, 136 insertions(+), 16 deletions(-)
diff --git a/doc/APIchanges b/doc/APIchanges
index 2d1be16756..5f8a20aa20 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2025-03-28
API changes, most recent first:
+xxxx-xx-xx - xxxxxxxxxx - lavfi 11.18.100 - avfilter.h
+ Add AVFILTER_CMD_FLAG_FORWARD and AVFILTER_CMD_FLAG_BACKWARD.
+
2026-05-17 - xxxxxxxxxxx - lavf 62.17.100 - avformat.h
Add AV_STREAM_GROUP_PARAMS_TREF.
Add AVStreamGroupTREF.
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index b15f0b08b4..db2869bd1d 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -607,27 +607,126 @@ static int set_enable_expr(FFFilterContext *ctxi, const char *expr)
return 0;
}
-int avfilter_process_command(AVFilterContext *filter, const char *cmd, const char *arg, char *res, int res_len, int flags)
+static int queue_enqueue(AVFilterContext ***pqueue,
+ unsigned *psize, unsigned *pcap,
+ AVFilterContext *ctx)
{
- if(!strcmp(cmd, "ping")){
- char local_res[256] = {0};
+ if (*psize >= *pcap) {
+ unsigned new_cap = *pcap ? *pcap * 2 : 16;
+ AVFilterContext **tmp;
- if (!res) {
- res = local_res;
- res_len = sizeof(local_res);
- }
- av_strlcatf(res, res_len, "pong from:%s %s\n", filter->filter->name, filter->name);
- if (res == local_res)
- av_log(filter, AV_LOG_INFO, "%s", res);
+ tmp = av_realloc_array(*pqueue, new_cap,
+ sizeof(**pqueue));
+ if (!tmp)
+ return AVERROR(ENOMEM);
+ *pqueue = tmp;
+ *pcap = new_cap;
+ }
+ (*pqueue)[(*psize)++] = ctx;
+ return 0;
+}
+
+static int process_filter_command(AVFilterContext *filter,
+ const char *cmd,
+ const char *arg, char *res,
+ int res_len, int flags)
+{
+ int process_flags = flags & ~(AVFILTER_CMD_FLAG_FORWARD |
+ AVFILTER_CMD_FLAG_BACKWARD);
+
+ if (!strcmp(cmd, "ping")) {
+ char local_res[256] = {0};
+ char *res_buf = res ? res : local_res;
+ size_t buf_len = res ? res_len : sizeof(local_res);
+ av_strlcatf(res_buf, buf_len, "pong from:%s %s\n",
+ filter->filter->name,
+ filter->name ? filter->name : "unknown");
+ if (!res)
+ av_log(filter, AV_LOG_INFO, "%s", res_buf);
return 0;
- }else if(!strcmp(cmd, "enable")) {
+ } else if (!strcmp(cmd, "enable")) {
return set_enable_expr(fffilterctx(filter), arg);
- }else if (fffilter(filter->filter)->process_command) {
- return fffilter(filter->filter)->process_command(filter, cmd, arg, res, res_len, flags);
+ } else if (fffilter(filter->filter)->process_command) {
+ return fffilter(filter->filter)->process_command(
+ filter, cmd, arg, res, res_len, process_flags);
}
return AVERROR(ENOSYS);
}
+int avfilter_process_command(AVFilterContext *filter,
+ const char *cmd, const char *arg,
+ char *res, int res_len, int flags)
+{
+ AVFilterContext **queue = NULL;
+ unsigned queue_size = 0, queue_cap = 0;
+ unsigned head = 0;
+ int backward = flags & AVFILTER_CMD_FLAG_BACKWARD;
+ int processed = 0;
+ int ret = AVERROR(ENOSYS);
+
+ if ((flags & AVFILTER_CMD_FLAG_FORWARD) &&
+ (flags & AVFILTER_CMD_FLAG_BACKWARD)) {
+ av_log(filter, AV_LOG_ERROR,
+ "FORWARD and BACKWARD flags are mutually "
+ "exclusive\n");
+ return AVERROR(EINVAL);
+ }
+
+ if (!(flags & (AVFILTER_CMD_FLAG_FORWARD |
+ AVFILTER_CMD_FLAG_BACKWARD)))
+ return process_filter_command(filter, cmd, arg,
+ res, res_len, flags);
+
+ fffilterctx(filter)->cmd_visited = 1;
+ ret = queue_enqueue(&queue, &queue_size, &queue_cap,
+ filter);
+ if (ret < 0)
+ goto cleanup;
+
+ while (head < queue_size) {
+ AVFilterContext *cur = queue[head++];
+ unsigned nb_links, i;
+
+ ret = process_filter_command(cur, cmd, arg,
+ res, res_len, flags);
+ if (ret != AVERROR(ENOSYS)) {
+ processed = 1;
+ if ((flags & AVFILTER_CMD_FLAG_ONE) || ret < 0)
+ goto cleanup;
+ }
+
+ nb_links = backward ? cur->nb_inputs
+ : cur->nb_outputs;
+ for (i = 0; i < nb_links; i++) {
+ AVFilterLink *link = backward ? cur->inputs[i]
+ : cur->outputs[i];
+ AVFilterContext *next;
+
+ if (!link)
+ continue;
+ next = backward ? link->src : link->dst;
+ if (!next || fffilterctx(next)->cmd_visited)
+ continue;
+
+ fffilterctx(next)->cmd_visited = 1;
+ ret = queue_enqueue(&queue, &queue_size,
+ &queue_cap, next);
+ if (ret < 0)
+ goto cleanup;
+ }
+ }
+
+ if (!processed)
+ ret = AVERROR(ENOSYS);
+
+cleanup:
+ for (unsigned i = 0; i < filter->graph->nb_filters; i++)
+ fffilterctx(filter->graph->filters[i])->cmd_visited = 0;
+ av_freep(&queue);
+
+ return ret;
+}
+
unsigned avfilter_filter_pad_count(const AVFilter *filter, int is_output)
{
return is_output ? fffilter(filter)->nb_outputs : fffilter(filter)->nb_inputs;
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index 02b58c42c2..43682a7883 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -466,8 +466,14 @@ struct AVFilterLink {
int avfilter_link(AVFilterContext *src, unsigned srcpad,
AVFilterContext *dst, unsigned dstpad);
-#define AVFILTER_CMD_FLAG_ONE 1 ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically
-#define AVFILTER_CMD_FLAG_FAST 2 ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw)
+#define AVFILTER_CMD_FLAG_ONE 1 ///< Stop once a filter understood the command (for target=all for example), fast filters are favored automatically
+#define AVFILTER_CMD_FLAG_FAST 2 ///< Only execute command when its fast (like a video out that supports contrast adjustment in hw)
+#define AVFILTER_CMD_FLAG_FORWARD 4 ///< Enable subgraph traversal: propagate command through filter chain along data flow.
+ /// Allows targeting specific subgraphs (e.g., commands from a source node to its entire
+ /// processing branch). Not supported in graph-level command functions.
+#define AVFILTER_CMD_FLAG_BACKWARD 8 ///< Enable reverse subgraph traversal: propagate command against data flow direction.
+ /// Useful for upstream control from destination filters back to sources.
+ /// Not supported in graph-level command functions.
/**
* Make the filter instance process a command.
diff --git a/libavfilter/avfilter_internal.h b/libavfilter/avfilter_internal.h
index 808dd6af38..7e6368d079 100644
--- a/libavfilter/avfilter_internal.h
+++ b/libavfilter/avfilter_internal.h
@@ -120,6 +120,12 @@ typedef struct FFFilterContext {
double *var_values;
struct AVFilterCommand *command_queue;
+
+ /**
+ * Flag to prevent infinite loops in cyclic filter graphs
+ * during recursive command propagation (FORWARD/BACKWARD).
+ */
+ int cmd_visited;
} FFFilterContext;
static inline FFFilterContext *fffilterctx(AVFilterContext *ctx)
diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c
index ad81d91bbc..e83a4d2117 100644
--- a/libavfilter/avfiltergraph.c
+++ b/libavfilter/avfiltergraph.c
@@ -1458,6 +1458,9 @@ int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const
if (!graph)
return r;
+ if (flags & (AVFILTER_CMD_FLAG_FORWARD | AVFILTER_CMD_FLAG_BACKWARD))
+ return r;
+
if ((flags & AVFILTER_CMD_FLAG_ONE) && !(flags & AVFILTER_CMD_FLAG_FAST)) {
r = avfilter_graph_send_command(graph, target, cmd, arg, res, res_len, flags | AVFILTER_CMD_FLAG_FAST);
if (r != AVERROR(ENOSYS))
@@ -1488,6 +1491,9 @@ int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const
if(!graph)
return 0;
+ if (flags & (AVFILTER_CMD_FLAG_FORWARD | AVFILTER_CMD_FLAG_BACKWARD))
+ return AVERROR(ENOSYS);
+
for (i = 0; i < graph->nb_filters; i++) {
AVFilterContext *filter = graph->filters[i];
FFFilterContext *ctxi = fffilterctx(filter);
diff --git a/libavfilter/version.h b/libavfilter/version.h
index 12fc6c853d..f86e5a9707 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -31,7 +31,7 @@
#include "version_major.h"
-#define LIBAVFILTER_VERSION_MINOR 17
+#define LIBAVFILTER_VERSION_MINOR 18
#define LIBAVFILTER_VERSION_MICRO 100
--
2.34.1
From dd741476d7849d1e682bc330744a4d1c158cc7d2 Mon Sep 17 00:00:00 2001
From: cenzhanquan1 <[email protected]>
Date: Tue, 19 May 2026 15:04:22 +0800
Subject: [PATCH v2 2/2] avfilter/f_sendcmd: add mode option for command
propagation direction
Add a 'mode' option to sendcmd/asendcmd filters controlling how commands
are dispatched:
graph (default): uses avfilter_graph_send_command() with FLAG_ONE,
targeting the first matching filter in the graph. Preserves original
sendcmd behavior.
forward: locates target filter by instance name, then calls
avfilter_process_command() with AVFILTER_CMD_FLAG_FORWARD to propagate
downstream along data flow.
backward: locates target filter by instance name, then calls
avfilter_process_command() with AVFILTER_CMD_FLAG_BACKWARD to propagate
upstream against data flow.
In forward/backward modes the target must be a named filter instance.
Add FATE tests covering graph, forward, backward, multi-target, subgraph
isolation, and cycle detection scenarios.
Signed-off-by: cenzhanquan1 <[email protected]>
---
doc/filters.texi | 21 +++
libavfilter/f_sendcmd.c | 64 ++++++++-
tests/fate/filter-audio.mak | 77 ++++++++++
tests/fate/filter-video.mak | 6 +
tests/filtergraphs/sendcmd-backward | 1 +
tests/filtergraphs/sendcmd-cycle | 1 +
tests/filtergraphs/sendcmd-forward | 1 +
tests/filtergraphs/sendcmd-graph | 1 +
tests/filtergraphs/sendcmd-isolation | 1 +
tests/filtergraphs/sendcmd-multi | 1 +
tests/ref/fate/filter-sendcmd-backward | 92 ++++++++++++
tests/ref/fate/filter-sendcmd-cycle | 10 ++
tests/ref/fate/filter-sendcmd-forward | 92 ++++++++++++
tests/ref/fate/filter-sendcmd-graph | 184 ++++++++++++++++++++++++
tests/ref/fate/filter-sendcmd-isolation | 184 ++++++++++++++++++++++++
tests/ref/fate/filter-sendcmd-multi | 92 ++++++++++++
16 files changed, 822 insertions(+), 6 deletions(-)
create mode 100644 tests/filtergraphs/sendcmd-backward
create mode 100644 tests/filtergraphs/sendcmd-cycle
create mode 100644 tests/filtergraphs/sendcmd-forward
create mode 100644 tests/filtergraphs/sendcmd-graph
create mode 100644 tests/filtergraphs/sendcmd-isolation
create mode 100644 tests/filtergraphs/sendcmd-multi
create mode 100644 tests/ref/fate/filter-sendcmd-backward
create mode 100644 tests/ref/fate/filter-sendcmd-cycle
create mode 100644 tests/ref/fate/filter-sendcmd-forward
create mode 100644 tests/ref/fate/filter-sendcmd-graph
create mode 100644 tests/ref/fate/filter-sendcmd-isolation
create mode 100644 tests/ref/fate/filter-sendcmd-multi
diff --git a/doc/filters.texi b/doc/filters.texi
index 2cae41c7c5..4a89dbc53d 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -32510,6 +32510,27 @@ Set the commands to be read and sent to the other filters.
@item filename, f
Set the filename of the commands to be read and sent to the other
filters.
+@item mode
+Set the command propagation mode. Available values are:
+
+@table @samp
+@item graph
+Use graph-level command dispatch (default). The command is sent via
+@code{avfilter_graph_send_command} to the first filter matching the
+target name or type in the graph (stops after the first match).
+
+@item forward
+Propagate the command along the data flow direction starting from the
+target filter instance. The command is delivered to the named filter
+and then forwarded through its output links to downstream filters.
+This allows targeting a specific subgraph without affecting other paths.
+The target must be a named filter instance (not a filter type).
+
+@item backward
+Propagate the command against the data flow direction starting from the
+target filter instance. The command is forwarded through input links to
+upstream filters. The target must be a named filter instance.
+@end table
@end table
@subsection Commands syntax
diff --git a/libavfilter/f_sendcmd.c b/libavfilter/f_sendcmd.c
index 304658ae3d..331948f38e 100644
--- a/libavfilter/f_sendcmd.c
+++ b/libavfilter/f_sendcmd.c
@@ -98,6 +98,12 @@ typedef struct Interval {
int enabled; ///< current time detected inside this interval
} Interval;
+typedef enum {
+ CMD_MODE_GRAPH = 0,
+ CMD_MODE_FORWARD,
+ CMD_MODE_BACKWARD
+} SendCmdMode;
+
typedef struct SendCmdContext {
const AVClass *class;
Interval *intervals;
@@ -105,6 +111,8 @@ typedef struct SendCmdContext {
char *commands_filename;
char *commands_str;
+
+ int mode;
} SendCmdContext;
#define OFFSET(x) offsetof(SendCmdContext, x)
@@ -114,6 +122,10 @@ static const AVOption options[] = {
{ "c", "set commands", OFFSET(commands_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
{ "filename", "set commands file", OFFSET(commands_filename), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
{ "f", "set commands file", OFFSET(commands_filename), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, FLAGS },
+ { "mode", "set command propagation mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=CMD_MODE_GRAPH}, CMD_MODE_GRAPH, CMD_MODE_BACKWARD, FLAGS, "mode" },
+ { "graph", "graph send command mode", 0, AV_OPT_TYPE_CONST, {.i64=CMD_MODE_GRAPH}, 0, 0, FLAGS, "mode" },
+ { "forward", "forward traversal mode", 0, AV_OPT_TYPE_CONST, {.i64=CMD_MODE_FORWARD}, 0, 0, FLAGS, "mode" },
+ { "backward", "backward traversal mode", 0, AV_OPT_TYPE_CONST, {.i64=CMD_MODE_BACKWARD}, 0, 0, FLAGS, "mode" },
{ NULL }
};
@@ -530,6 +542,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *ref)
for (j = 0; flags && j < interval->nb_commands; j++) {
Command *cmd = &interval->commands[j];
char *cmd_arg = cmd->arg;
+ int send_flags = 0;
char buf[1024];
if (cmd->flags & flags) {
@@ -561,13 +574,52 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *ref)
return AVERROR(ENOMEM);
}
}
+
+ if (s->mode == CMD_MODE_GRAPH)
+ send_flags = AVFILTER_CMD_FLAG_ONE;
+ else if (s->mode == CMD_MODE_FORWARD)
+ send_flags = AVFILTER_CMD_FLAG_FORWARD;
+ else if (s->mode == CMD_MODE_BACKWARD)
+ send_flags = AVFILTER_CMD_FLAG_BACKWARD;
+
av_log(ctx, AV_LOG_VERBOSE,
- "Processing command #%d target:%s command:%s arg:%s\n",
- cmd->index, cmd->target, cmd->command, cmd_arg);
- ret = avfilter_graph_send_command(inl->graph,
- cmd->target, cmd->command, cmd_arg,
- buf, sizeof(buf),
- AVFILTER_CMD_FLAG_ONE);
+ "Processing command #%d target:%s command:%s arg:%s\n",
+ cmd->index, cmd->target, cmd->command, cmd_arg);
+
+ if (s->mode == CMD_MODE_GRAPH) {
+ ret = avfilter_graph_send_command(inl->graph,
+ cmd->target, cmd->command, cmd_arg,
+ buf, sizeof(buf),
+ send_flags);
+ } else {
+ AVFilterContext *start_filter = NULL;
+
+ if (cmd->target && cmd->target[0]) {
+ for (int k = 0; k < inl->graph->nb_filters; k++) {
+ AVFilterContext *filter = inl->graph->filters[k];
+
+ if (filter->name && strcmp(filter->name, cmd->target) == 0) {
+ start_filter = filter;
+ break;
+ }
+ }
+ }
+
+ if (!start_filter) {
+ av_log(ctx, AV_LOG_ERROR,
+ "Cannot find target filter instance '%s' for command #%d in non-GRAPH mode\n",
+ cmd->target ? cmd->target : "(null)", j);
+
+ if (cmd->flags & COMMAND_FLAG_EXPR)
+ av_freep(&cmd_arg);
+
+ continue;
+ }
+
+ ret = avfilter_process_command(start_filter, cmd->command,
+ cmd_arg, buf, sizeof(buf), send_flags);
+ }
+
av_log(ctx, AV_LOG_VERBOSE,
"Command reply for command #%d: ret:%s res:%s\n",
cmd->index, av_err2str(ret), buf);
diff --git a/tests/fate/filter-audio.mak b/tests/fate/filter-audio.mak
index 526645a634..f37ce7bc64 100644
--- a/tests/fate/filter-audio.mak
+++ b/tests/fate/filter-audio.mak
@@ -447,6 +447,83 @@ FATE_AFILTER-yes += fate-filter-formats
fate-filter-formats: libavfilter/tests/formats$(EXESUF)
fate-filter-formats: CMD = run libavfilter/tests/formats$(EXESUF)
+# FATE tests for sendcmd/asendcmd with new propagation modes
+# These tests verify command propagation in different directions through the filter graph.
+# sendcmd/asendcmd FATE tests
+# All tests use volume with precision=fixed for cross-platform reproducibility.
+# Forward/backward modes use named filter instances (e.g. volume@v1) because
+# the code locates the start filter by instance name, then propagates the
+# command along the filter chain via avfilter_process_command().
+#
+# Test design:
+# 1. graph mode - avfilter_graph_send_command affects ALL matching filters
+# 2. forward mode - command propagates downstream only from a named start filter
+# 3. backward mode- command propagates upstream only from a named start filter
+# 4. multi-target - forward sends commands to multiple filter types
+# 5. subgraph isolation - two independent subgraphs, forward in one does not
+# affect the other (each subgraph outputs separately, no amix)
+
+# Test 1: graph mode - command targets the first matching volume filter.
+# Two subgraphs each with a volume filter; graph send_command(target="volume")
+# with AVFILTER_CMD_FLAG_ONE stops at the first match.
+# Expected: [a1] has volume=0.5 applied, [a2] remains at volume=1.0.
+FATE_AFILTER-$(call FILTERDEMDECENCMUX, ASENDCMD VOLUME ANULL ARESAMPLE AFORMAT, WAV, PCM_S16LE, PCM_S16LE, WAV) += fate-filter-sendcmd-graph
+fate-filter-sendcmd-graph: tests/data/filtergraphs/sendcmd-graph
+fate-filter-sendcmd-graph: CMD = framecrc \
+ -f lavfi -i "sine=frequency=440:sample_rate=44100:duration=2" \
+ -f lavfi -i "sine=frequency=880:sample_rate=44100:duration=2" \
+ -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/sendcmd-graph \
+ -map "[a1]" -map "[a2]"
+
+# Test 2: forward mode - command propagates downstream only.
+# Chain: volume@v1(0.8) -> asendcmd(forward, target=volume@v2, set volume 0.5) -> volume@v2(1.0)
+# Forward propagation from v2: v2 receives the command (set to 0.5), then propagates
+# downstream but there are no more volume filters. v1 is upstream, unaffected.
+# Expected output: 0.8 * 0.5 = 0.4
+FATE_AFILTER-$(call FILTERDEMDECENCMUX, ASENDCMD VOLUME ARESAMPLE AFORMAT, WAV, PCM_S16LE, PCM_S16LE, WAV) += fate-filter-sendcmd-forward
+fate-filter-sendcmd-forward: tests/data/filtergraphs/sendcmd-forward
+fate-filter-sendcmd-forward: CMD = framecrc \
+ -f lavfi -i "sine=frequency=440:sample_rate=44100:duration=2" \
+ -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/sendcmd-forward \
+ -map "[out]"
+
+# Test 3: backward mode - command propagates upstream only.
+# Chain: volume@v1(1.0) -> asendcmd(backward, target=volume@v1, set volume 0.3) -> volume@v2(1.0)
+# Backward propagation from v1: v1 receives the command (set to 0.3), then propagates
+# upstream but there are no more volume filters. v2 is downstream, unaffected.
+# Expected output: 0.3 * 1.0 = 0.3
+FATE_AFILTER-$(call FILTERDEMDECENCMUX, ASENDCMD VOLUME ARESAMPLE AFORMAT, WAV, PCM_S16LE, PCM_S16LE, WAV) += fate-filter-sendcmd-backward
+fate-filter-sendcmd-backward: tests/data/filtergraphs/sendcmd-backward
+fate-filter-sendcmd-backward: CMD = framecrc \
+ -f lavfi -i "sine=frequency=440:sample_rate=44100:duration=2" \
+ -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/sendcmd-backward \
+ -map "[out]"
+
+# Test 4: forward mode sending commands to multiple filter types.
+# Chain: asendcmd(forward, target=volume@v1) -> volume@v1(1.0) -> volume@v2(1.0)
+# The command targets volume@v1 and sets volume=0.5. Forward propagation from v1
+# reaches v2, which also supports the "volume" command, so v2 is also set to 0.5.
+# Expected output: 0.5 * 0.5 = 0.25
+FATE_AFILTER-$(call FILTERDEMDECENCMUX, ASENDCMD VOLUME ARESAMPLE AFORMAT, WAV, PCM_S16LE, PCM_S16LE, WAV) += fate-filter-sendcmd-multi
+fate-filter-sendcmd-multi: tests/data/filtergraphs/sendcmd-multi
+fate-filter-sendcmd-multi: CMD = framecrc \
+ -f lavfi -i "sine=frequency=440:sample_rate=44100:duration=2" \
+ -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/sendcmd-multi \
+ -map "[out]"
+
+# Test 5: subgraph isolation - forward command in subgraph1 must NOT affect subgraph2.
+# Subgraph1: asendcmd(forward, target=volume@v1, set volume 0.5) -> volume@v1(1.0)
+# Subgraph2: volume@v2(1.0) (no asendcmd, should remain at 1.0)
+# Each subgraph outputs independently (no amix). If isolation works correctly,
+# [a1] has volume=0.5 and [a2] has volume=1.0.
+FATE_AFILTER-$(call FILTERDEMDECENCMUX, ASENDCMD VOLUME ARESAMPLE AFORMAT, WAV, PCM_S16LE, PCM_S16LE, WAV) += fate-filter-sendcmd-isolation
+fate-filter-sendcmd-isolation: tests/data/filtergraphs/sendcmd-isolation
+fate-filter-sendcmd-isolation: CMD = framecrc \
+ -f lavfi -i "sine=frequency=440:sample_rate=44100:duration=2" \
+ -f lavfi -i "sine=frequency=880:sample_rate=44100:duration=2" \
+ -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/sendcmd-isolation \
+ -map "[a1]" -map "[a2]"
+
FATE_AFILTER-yes := $(if $(call FRAMECRC), $(FATE_AFILTER-yes))
FATE_SAMPLES_AVCONV += $(FATE_AFILTER_SAMPLES-yes)
FATE_FFMPEG += $(FATE_AFILTER-yes)
diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak
index af9c374e1c..07aa93de75 100644
--- a/tests/fate/filter-video.mak
+++ b/tests/fate/filter-video.mak
@@ -178,6 +178,12 @@ fate-filter-lavd-scalenorm: CMD = framecrc -f lavfi -graph_file $(TARGET_PATH)/t
FATE_FILTER-$(call FILTERFRAMECRC, TESTSRC2 FEEDBACK HFLIP, LAVFI_INDEV) += fate-filter-feedback-hflip
fate-filter-feedback-hflip: CMD = framecrc -f lavfi -i testsrc2=d=1 -vf "[in][hflipin]feedback=x=0:y=0:w=100:h=100[out][hflipout];[hflipout]hflip[hflipin]"
+FATE_FILTER-$(call FILTERFRAMECRC, TESTSRC2 SENDCMD FEEDBACK HUE FORMAT) += fate-filter-sendcmd-cycle
+fate-filter-sendcmd-cycle: tests/data/filtergraphs/sendcmd-cycle
+fate-filter-sendcmd-cycle: CMD = framecrc \
+ -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/sendcmd-cycle \
+ -map "[out0]" -frames:v 5
+
FATE_FILTER-$(call FILTERFRAMECRC, FRAMERATE TESTSRC2) += fate-filter-framerate-up fate-filter-framerate-down
fate-filter-framerate-up: CMD = framecrc -lavfi testsrc2=r=2:d=10,framerate=fps=10 -t 1
fate-filter-framerate-down: CMD = framecrc -lavfi testsrc2=r=2:d=10,framerate=fps=1 -t 1
diff --git a/tests/filtergraphs/sendcmd-backward b/tests/filtergraphs/sendcmd-backward
new file mode 100644
index 0000000000..0a22d05a88
--- /dev/null
+++ b/tests/filtergraphs/sendcmd-backward
@@ -0,0 +1 @@
+[0:a]volume@v1=precision=fixed:volume=1.0,asendcmd=mode=backward:commands='0.0 volume@v1 volume 0.3',volume@v2=precision=fixed:volume=1.0,aresample,aformat=sample_fmts=s16[out]
diff --git a/tests/filtergraphs/sendcmd-cycle b/tests/filtergraphs/sendcmd-cycle
new file mode 100644
index 0000000000..7b7be773ce
--- /dev/null
+++ b/tests/filtergraphs/sendcmd-cycle
@@ -0,0 +1 @@
+testsrc2=d=1:r=5:s=16x16,sendcmd=mode=forward:commands='0.0 hue@h1 h 90'[cmd];[cmd][feedin]feedback@fb=x=0:y=0:w=16:h=16[out0][feedout];[feedout]hue@h1,format=yuv420p[feedin]
diff --git a/tests/filtergraphs/sendcmd-forward b/tests/filtergraphs/sendcmd-forward
new file mode 100644
index 0000000000..e963cdf74b
--- /dev/null
+++ b/tests/filtergraphs/sendcmd-forward
@@ -0,0 +1 @@
+[0:a]volume@v1=precision=fixed:volume=0.8,asendcmd=mode=forward:commands='0.0 volume@v2 volume 0.5',volume@v2=precision=fixed:volume=1.0,aresample,aformat=sample_fmts=s16[out]
diff --git a/tests/filtergraphs/sendcmd-graph b/tests/filtergraphs/sendcmd-graph
new file mode 100644
index 0000000000..b43f4a52b9
--- /dev/null
+++ b/tests/filtergraphs/sendcmd-graph
@@ -0,0 +1 @@
+[0:a]asendcmd=mode=graph:commands='0.0 volume volume 0.5',anull,volume=precision=fixed:volume=1.0,aresample,aformat=sample_fmts=s16[a1];[1:a]anull,volume=precision=fixed:volume=1.0,aresample,aformat=sample_fmts=s16[a2]
diff --git a/tests/filtergraphs/sendcmd-isolation b/tests/filtergraphs/sendcmd-isolation
new file mode 100644
index 0000000000..0ab212a912
--- /dev/null
+++ b/tests/filtergraphs/sendcmd-isolation
@@ -0,0 +1 @@
+[0:a]asendcmd=mode=forward:commands='0.0 volume@v1 volume 0.5',volume@v1=precision=fixed:volume=1.0,aresample,aformat=sample_fmts=s16[a1];[1:a]volume@v2=precision=fixed:volume=1.0,aresample,aformat=sample_fmts=s16[a2]
diff --git a/tests/filtergraphs/sendcmd-multi b/tests/filtergraphs/sendcmd-multi
new file mode 100644
index 0000000000..0ad8dc1847
--- /dev/null
+++ b/tests/filtergraphs/sendcmd-multi
@@ -0,0 +1 @@
+[0:a]asendcmd=mode=forward:commands='0.0 volume@v1 volume 0.5',volume@v1=precision=fixed:volume=1.0,volume@v2=precision=fixed:volume=1.0,aresample,aformat=sample_fmts=s16[out]
diff --git a/tests/ref/fate/filter-sendcmd-backward b/tests/ref/fate/filter-sendcmd-backward
new file mode 100644
index 0000000000..9c323e1403
--- /dev/null
+++ b/tests/ref/fate/filter-sendcmd-backward
@@ -0,0 +1,92 @@
+#tb 0: 1/44100
+#media_type 0: audio
+#codec_id 0: pcm_s16le
+#sample_rate 0: 44100
+#channel_layout_name 0: mono
+0, 0, 0, 1024, 2048, 0x2096f45b
+0, 1024, 1024, 1024, 2048, 0x2544f2ff
+0, 2048, 2048, 1024, 2048, 0xf7abfedf
+0, 3072, 3072, 1024, 2048, 0x193f0647
+0, 4096, 4096, 1024, 2048, 0x38e2fc53
+0, 5120, 5120, 1024, 2048, 0x475df4d1
+0, 6144, 6144, 1024, 2048, 0xa4baf131
+0, 7168, 7168, 1024, 2048, 0x62e1087e
+0, 8192, 8192, 1024, 2048, 0x513a048e
+0, 9216, 9216, 1024, 2048, 0x3b02f5bf
+0, 10240, 10240, 1024, 2048, 0xbb3df267
+0, 11264, 11264, 1024, 2048, 0x5650fb8a
+0, 12288, 12288, 1024, 2048, 0x3cf70428
+0, 13312, 13312, 1024, 2048, 0xa2ae034f
+0, 14336, 14336, 1024, 2048, 0x2219f359
+0, 15360, 15360, 1024, 2048, 0x2405f1d1
+0, 16384, 16384, 1024, 2048, 0x8bde03f2
+0, 17408, 17408, 1024, 2048, 0x73e1040d
+0, 18432, 18432, 1024, 2048, 0x9dfcfc8c
+0, 19456, 19456, 1024, 2048, 0x50bff1bf
+0, 20480, 20480, 1024, 2048, 0xb726f588
+0, 21504, 21504, 1024, 2048, 0x0ffd04bc
+0, 22528, 22528, 1024, 2048, 0xbe0d069e
+0, 23552, 23552, 1024, 2048, 0x38b9f2d9
+0, 24576, 24576, 1024, 2048, 0x827ff349
+0, 25600, 25600, 1024, 2048, 0xad39fd4f
+0, 26624, 26624, 1024, 2048, 0xc59b076f
+0, 27648, 27648, 1024, 2048, 0x0138ff07
+0, 28672, 28672, 1024, 2048, 0xe17ff31d
+0, 29696, 29696, 1024, 2048, 0x4323f11a
+0, 30720, 30720, 1024, 2048, 0x1cdb05ec
+0, 31744, 31744, 1024, 2048, 0x82b8066e
+0, 32768, 32768, 1024, 2048, 0xb275f58b
+0, 33792, 33792, 1024, 2048, 0xc34ef429
+0, 34816, 34816, 1024, 2048, 0x6650f803
+0, 35840, 35840, 1024, 2048, 0x96ea06ec
+0, 36864, 36864, 1024, 2048, 0xf8d303f6
+0, 37888, 37888, 1024, 2048, 0x98b4f180
+0, 38912, 38912, 1024, 2048, 0x1b36f2d0
+0, 39936, 39936, 1024, 2048, 0x127201cc
+0, 40960, 40960, 1024, 2048, 0xaf25046a
+0, 41984, 41984, 1024, 2048, 0xba88fbed
+0, 43008, 43008, 1024, 2048, 0x43a6f4f0
+0, 44032, 44032, 1024, 2048, 0x622ef344
+0, 45056, 45056, 1024, 2048, 0x4e7806de
+0, 46080, 46080, 1024, 2048, 0xb7e304e3
+0, 47104, 47104, 1024, 2048, 0x9d06f571
+0, 48128, 48128, 1024, 2048, 0xc69df2d9
+0, 49152, 49152, 1024, 2048, 0xb6b6fbdb
+0, 50176, 50176, 1024, 2048, 0x16a3045b
+0, 51200, 51200, 1024, 2048, 0xdf9c01ed
+0, 52224, 52224, 1024, 2048, 0xd1b9f2d9
+0, 53248, 53248, 1024, 2048, 0x1ddff16d
+0, 54272, 54272, 1024, 2048, 0xf47e03e3
+0, 55296, 55296, 1024, 2048, 0x400306ef
+0, 56320, 56320, 1024, 2048, 0xd6f9f834
+0, 57344, 57344, 1024, 2048, 0xe6ebf417
+0, 58368, 58368, 1024, 2048, 0x816ef77a
+0, 59392, 59392, 1024, 2048, 0x3a20045b
+0, 60416, 60416, 1024, 2048, 0x4924080b
+0, 61440, 61440, 1024, 2048, 0x7367ef24
+0, 62464, 62464, 1024, 2048, 0xceecf322
+0, 63488, 63488, 1024, 2048, 0x14b3fed6
+0, 64512, 64512, 1024, 2048, 0x52da077a
+0, 65536, 65536, 1024, 2048, 0xe6e8fd67
+0, 66560, 66560, 1024, 2048, 0xc11ef34f
+0, 67584, 67584, 1024, 2048, 0xbf98f2c7
+0, 68608, 68608, 1024, 2048, 0x14630686
+0, 69632, 69632, 1024, 2048, 0xcfd804d8
+0, 70656, 70656, 1024, 2048, 0xc8fff596
+0, 71680, 71680, 1024, 2048, 0xcba1f3c9
+0, 72704, 72704, 1024, 2048, 0x4e7bfa5b
+0, 73728, 73728, 1024, 2048, 0x4cba0615
+0, 74752, 74752, 1024, 2048, 0xe7870200
+0, 75776, 75776, 1024, 2048, 0x0388f3f3
+0, 76800, 76800, 1024, 2048, 0x06d0f136
+0, 77824, 77824, 1024, 2048, 0xc2370344
+0, 78848, 78848, 1024, 2048, 0x97b30425
+0, 79872, 79872, 1024, 2048, 0xc3fcfbad
+0, 80896, 80896, 1024, 2048, 0x988ef261
+0, 81920, 81920, 1024, 2048, 0x9b0df5a5
+0, 82944, 82944, 1024, 2048, 0xb9210486
+0, 83968, 83968, 1024, 2048, 0x1049088c
+0, 84992, 84992, 1024, 2048, 0xb7def15b
+0, 86016, 86016, 1024, 2048, 0x8b40f4b3
+0, 87040, 87040, 1024, 2048, 0xa122fe41
+0, 88064, 88064, 136, 272, 0xe5cc97e8
diff --git a/tests/ref/fate/filter-sendcmd-cycle b/tests/ref/fate/filter-sendcmd-cycle
new file mode 100644
index 0000000000..3366207b43
--- /dev/null
+++ b/tests/ref/fate/filter-sendcmd-cycle
@@ -0,0 +1,10 @@
+#tb 0: 1/5
+#media_type 0: video
+#codec_id 0: rawvideo
+#dimensions 0: 16x16
+#sar 0: 1/1
+0, 0, 0, 1, 384, 0x6a848396
+0, 1, 1, 1, 384, 0x6a848396
+0, 2, 2, 1, 384, 0x6a848396
+0, 3, 3, 1, 384, 0x68b58516
+0, 4, 4, 1, 384, 0x7531827f
diff --git a/tests/ref/fate/filter-sendcmd-forward b/tests/ref/fate/filter-sendcmd-forward
new file mode 100644
index 0000000000..94ca65653e
--- /dev/null
+++ b/tests/ref/fate/filter-sendcmd-forward
@@ -0,0 +1,92 @@
+#tb 0: 1/44100
+#media_type 0: audio
+#codec_id 0: pcm_s16le
+#sample_rate 0: 44100
+#channel_layout_name 0: mono
+0, 0, 0, 1024, 2048, 0xeed5ef41
+0, 1024, 1024, 1024, 2048, 0x9bf4f10b
+0, 2048, 2048, 1024, 2048, 0xe1ebfc6b
+0, 3072, 3072, 1024, 2048, 0xc8a40820
+0, 4096, 4096, 1024, 2048, 0x2a81fd54
+0, 5120, 5120, 1024, 2048, 0xd1c8ed7e
+0, 6144, 6144, 1024, 2048, 0xeb0af366
+0, 7168, 7168, 1024, 2048, 0xd80c0648
+0, 8192, 8192, 1024, 2048, 0xddf70834
+0, 9216, 9216, 1024, 2048, 0x8411f56a
+0, 10240, 10240, 1024, 2048, 0xcc20f048
+0, 11264, 11264, 1024, 2048, 0x777cfbe1
+0, 12288, 12288, 1024, 2048, 0xf198084b
+0, 13312, 13312, 1024, 2048, 0xa98d010e
+0, 14336, 14336, 1024, 2048, 0xe6a9f2dc
+0, 15360, 15360, 1024, 2048, 0x3b01ee2a
+0, 16384, 16384, 1024, 2048, 0xc61d02ec
+0, 17408, 17408, 1024, 2048, 0x7cd005c6
+0, 18432, 18432, 1024, 2048, 0x24f1faa2
+0, 19456, 19456, 1024, 2048, 0xbfdeee5d
+0, 20480, 20480, 1024, 2048, 0x528bf57f
+0, 21504, 21504, 1024, 2048, 0x00650715
+0, 22528, 22528, 1024, 2048, 0xf9fa0771
+0, 23552, 23552, 1024, 2048, 0xc14ef3fa
+0, 24576, 24576, 1024, 2048, 0x603ef05f
+0, 25600, 25600, 1024, 2048, 0x53b6fcb6
+0, 26624, 26624, 1024, 2048, 0xfeb2084b
+0, 27648, 27648, 1024, 2048, 0xf8c60160
+0, 28672, 28672, 1024, 2048, 0x4975ee8e
+0, 29696, 29696, 1024, 2048, 0xb0b3f18f
+0, 30720, 30720, 1024, 2048, 0xa13503e1
+0, 31744, 31744, 1024, 2048, 0xba1e07a5
+0, 32768, 32768, 1024, 2048, 0x327ef687
+0, 33792, 33792, 1024, 2048, 0x99daee42
+0, 34816, 34816, 1024, 2048, 0x0e29f940
+0, 35840, 35840, 1024, 2048, 0x0b0507e5
+0, 36864, 36864, 1024, 2048, 0x2a29045a
+0, 37888, 37888, 1024, 2048, 0x89c2f105
+0, 38912, 38912, 1024, 2048, 0xd897f0dc
+0, 39936, 39936, 1024, 2048, 0xaebe024a
+0, 40960, 40960, 1024, 2048, 0xd39007a6
+0, 41984, 41984, 1024, 2048, 0x2c28fb23
+0, 43008, 43008, 1024, 2048, 0xa56cf1f3
+0, 44032, 44032, 1024, 2048, 0x1754f1d5
+0, 45056, 45056, 1024, 2048, 0x8c3507df
+0, 46080, 46080, 1024, 2048, 0x9b8704da
+0, 47104, 47104, 1024, 2048, 0xdd06f412
+0, 48128, 48128, 1024, 2048, 0x7a04edd9
+0, 49152, 49152, 1024, 2048, 0xd0affd04
+0, 50176, 50176, 1024, 2048, 0x0e58069b
+0, 51200, 51200, 1024, 2048, 0xbe900271
+0, 52224, 52224, 1024, 2048, 0x749df0ee
+0, 53248, 53248, 1024, 2048, 0x6973f0ed
+0, 54272, 54272, 1024, 2048, 0xcbc70437
+0, 55296, 55296, 1024, 2048, 0x4d3307f1
+0, 56320, 56320, 1024, 2048, 0x85c4fa77
+0, 57344, 57344, 1024, 2048, 0xceb1ee2d
+0, 58368, 58368, 1024, 2048, 0xa93ff976
+0, 59392, 59392, 1024, 2048, 0x27a80480
+0, 60416, 60416, 1024, 2048, 0x73520716
+0, 61440, 61440, 1024, 2048, 0x43b2ee95
+0, 62464, 62464, 1024, 2048, 0x00dcee94
+0, 63488, 63488, 1024, 2048, 0xad5f0027
+0, 64512, 64512, 1024, 2048, 0x8a4e0851
+0, 65536, 65536, 1024, 2048, 0xdfa0fce2
+0, 66560, 66560, 1024, 2048, 0xaa22f066
+0, 67584, 67584, 1024, 2048, 0xfe4cf3db
+0, 68608, 68608, 1024, 2048, 0xec560757
+0, 69632, 69632, 1024, 2048, 0xd197082f
+0, 70656, 70656, 1024, 2048, 0xfad5f39b
+0, 71680, 71680, 1024, 2048, 0x69baf265
+0, 72704, 72704, 1024, 2048, 0x729cf862
+0, 73728, 73728, 1024, 2048, 0x902008da
+0, 74752, 74752, 1024, 2048, 0x7b23ffe3
+0, 75776, 75776, 1024, 2048, 0x04f0f05a
+0, 76800, 76800, 1024, 2048, 0x3944eeb2
+0, 77824, 77824, 1024, 2048, 0xbeb502f7
+0, 78848, 78848, 1024, 2048, 0x3bbf0750
+0, 79872, 79872, 1024, 2048, 0xd5fbfc0a
+0, 80896, 80896, 1024, 2048, 0x7fe9f049
+0, 81920, 81920, 1024, 2048, 0xbebbf549
+0, 82944, 82944, 1024, 2048, 0x5c4a081e
+0, 83968, 83968, 1024, 2048, 0x9d020663
+0, 84992, 84992, 1024, 2048, 0x78b9f495
+0, 86016, 86016, 1024, 2048, 0x4351ed58
+0, 87040, 87040, 1024, 2048, 0x9d7f0051
+0, 88064, 88064, 136, 272, 0x3d469b01
diff --git a/tests/ref/fate/filter-sendcmd-graph b/tests/ref/fate/filter-sendcmd-graph
new file mode 100644
index 0000000000..dc27bbfa21
--- /dev/null
+++ b/tests/ref/fate/filter-sendcmd-graph
@@ -0,0 +1,184 @@
+#tb 0: 1/44100
+#media_type 0: audio
+#codec_id 0: pcm_s16le
+#sample_rate 0: 44100
+#channel_layout_name 0: mono
+#tb 1: 1/44100
+#media_type 1: audio
+#codec_id 1: pcm_s16le
+#sample_rate 1: 44100
+#channel_layout_name 1: mono
+0, 0, 0, 1024, 2048, 0xaf9eeccd
+1, 0, 0, 1024, 2048, 0x72dcf0cb
+0, 1024, 1024, 1024, 2048, 0x4a7cf116
+1, 1024, 1024, 1024, 2048, 0x89fc06b0
+0, 2048, 2048, 1024, 2048, 0x13fef62b
+1, 2048, 2048, 1024, 2048, 0x01aef583
+0, 3072, 3072, 1024, 2048, 0xfa880006
+1, 3072, 3072, 1024, 2048, 0x79be017e
+0, 4096, 4096, 1024, 2048, 0x2590f589
+1, 4096, 4096, 1024, 2048, 0xd00ffd65
+0, 5120, 5120, 1024, 2048, 0xc14df02b
+1, 5120, 5120, 1024, 2048, 0x4513fcf8
+0, 6144, 6144, 1024, 2048, 0x1f4becad
+1, 6144, 6144, 1024, 2048, 0x55a30411
+0, 7168, 7168, 1024, 2048, 0x1e4a0347
+1, 7168, 7168, 1024, 2048, 0x30f9f596
+0, 8192, 8192, 1024, 2048, 0x5d8100cc
+1, 8192, 8192, 1024, 2048, 0xbdf203a3
+0, 9216, 9216, 1024, 2048, 0xb507f059
+1, 9216, 9216, 1024, 2048, 0x466af89f
+0, 10240, 10240, 1024, 2048, 0x5e02f015
+1, 10240, 10240, 1024, 2048, 0xeb8bfe33
+0, 11264, 11264, 1024, 2048, 0xa159f96c
+1, 11264, 11264, 1024, 2048, 0x5335fe73
+0, 12288, 12288, 1024, 2048, 0xe336f868
+1, 12288, 12288, 1024, 2048, 0x159bff32
+0, 13312, 13312, 1024, 2048, 0x73dc01f6
+1, 13312, 13312, 1024, 2048, 0x1b81ff1e
+0, 14336, 14336, 1024, 2048, 0xc625ee66
+1, 14336, 14336, 1024, 2048, 0xaa2ffa70
+0, 15360, 15360, 1024, 2048, 0x5ae1eda2
+1, 15360, 15360, 1024, 2048, 0x0441004f
+0, 16384, 16384, 1024, 2048, 0x8379fed3
+1, 16384, 16384, 1024, 2048, 0x8433fb21
+0, 17408, 17408, 1024, 2048, 0xfc72fab2
+1, 17408, 17408, 1024, 2048, 0x6a9afe1d
+0, 18432, 18432, 1024, 2048, 0x12edf9bc
+1, 18432, 18432, 1024, 2048, 0x7bd2ff53
+0, 19456, 19456, 1024, 2048, 0x7348ea17
+1, 19456, 19456, 1024, 2048, 0xbe15fcfe
+0, 20480, 20480, 1024, 2048, 0x8243f498
+1, 20480, 20480, 1024, 2048, 0xfc12014a
+0, 21504, 21504, 1024, 2048, 0x2b79fa61
+1, 21504, 21504, 1024, 2048, 0x49dbf575
+0, 22528, 22528, 1024, 2048, 0xf0360382
+1, 22528, 22528, 1024, 2048, 0xfe400599
+0, 23552, 23552, 1024, 2048, 0xc0cdef11
+1, 23552, 23552, 1024, 2048, 0xd7bdf732
+0, 24576, 24576, 1024, 2048, 0x4fc5efa4
+1, 24576, 24576, 1024, 2048, 0xb70cffac
+0, 25600, 25600, 1024, 2048, 0x03d6f918
+1, 25600, 25600, 1024, 2048, 0xc46a015f
+0, 26624, 26624, 1024, 2048, 0x401d0159
+1, 26624, 26624, 1024, 2048, 0xcf07f9a9
+0, 27648, 27648, 1024, 2048, 0x84e1f9a0
+1, 27648, 27648, 1024, 2048, 0x108c06c2
+0, 28672, 28672, 1024, 2048, 0x7b62f020
+1, 28672, 28672, 1024, 2048, 0xd340f350
+0, 29696, 29696, 1024, 2048, 0x7eefee08
+1, 29696, 29696, 1024, 2048, 0x0a7b09f0
+0, 30720, 30720, 1024, 2048, 0x4badfcfa
+1, 30720, 30720, 1024, 2048, 0x4299ee71
+0, 31744, 31744, 1024, 2048, 0x02c1fedb
+1, 31744, 31744, 1024, 2048, 0x43ff060d
+0, 32768, 32768, 1024, 2048, 0x5ccfefb7
+1, 32768, 32768, 1024, 2048, 0xbe31fafb
+0, 33792, 33792, 1024, 2048, 0x7128f060
+1, 33792, 33792, 1024, 2048, 0xaaae01cb
+0, 34816, 34816, 1024, 2048, 0x1534f28c
+1, 34816, 34816, 1024, 2048, 0xa7abfd7f
+0, 35840, 35840, 1024, 2048, 0x1d16011a
+1, 35840, 35840, 1024, 2048, 0x0b0cf839
+0, 36864, 36864, 1024, 2048, 0xc29000ab
+1, 36864, 36864, 1024, 2048, 0x5cec0417
+0, 37888, 37888, 1024, 2048, 0x125fedca
+1, 37888, 37888, 1024, 2048, 0x6909f4f5
+0, 38912, 38912, 1024, 2048, 0x470aeed8
+1, 38912, 38912, 1024, 2048, 0xf89104fb
+0, 39936, 39936, 1024, 2048, 0x2a9effeb
+1, 39936, 39936, 1024, 2048, 0x51daf8c8
+0, 40960, 40960, 1024, 2048, 0x3b4ff8da
+1, 40960, 40960, 1024, 2048, 0xc66004f4
+0, 41984, 41984, 1024, 2048, 0x848afa85
+1, 41984, 41984, 1024, 2048, 0xd48efa17
+0, 43008, 43008, 1024, 2048, 0x18cdeff7
+1, 43008, 43008, 1024, 2048, 0xb6ed001a
+0, 44032, 44032, 1024, 2048, 0x0941ee89
+1, 44032, 44032, 1024, 2048, 0x595ffe38
+0, 45056, 45056, 1024, 2048, 0x178301e3
+1, 45056, 45056, 1024, 2048, 0xa808f774
+0, 46080, 46080, 1024, 2048, 0x2dc2fc01
+1, 46080, 46080, 1024, 2048, 0x849104d9
+0, 47104, 47104, 1024, 2048, 0x8ac0f3b5
+1, 47104, 47104, 1024, 2048, 0xd949f89a
+0, 48128, 48128, 1024, 2048, 0x7fa8eaf3
+1, 48128, 48128, 1024, 2048, 0x091600d3
+0, 49152, 49152, 1024, 2048, 0x5ff3fa4f
+1, 49152, 49152, 1024, 2048, 0x1a5dfcf8
+0, 50176, 50176, 1024, 2048, 0x6b56f9d0
+1, 50176, 50176, 1024, 2048, 0x1ea3fadb
+0, 51200, 51200, 1024, 2048, 0x3992ff22
+1, 51200, 51200, 1024, 2048, 0x4078002c
+0, 52224, 52224, 1024, 2048, 0x79aeeef4
+1, 52224, 52224, 1024, 2048, 0xd791f830
+0, 53248, 53248, 1024, 2048, 0xf6aceda2
+1, 53248, 53248, 1024, 2048, 0x6f210581
+0, 54272, 54272, 1024, 2048, 0x79fc0084
+1, 54272, 54272, 1024, 2048, 0x0ae3fa9b
+0, 55296, 55296, 1024, 2048, 0x0b6a0127
+1, 55296, 55296, 1024, 2048, 0x94e5feaa
+0, 56320, 56320, 1024, 2048, 0x4530f2bd
+1, 56320, 56320, 1024, 2048, 0x461f0199
+0, 57344, 57344, 1024, 2048, 0x084ef062
+1, 57344, 57344, 1024, 2048, 0x9841f901
+0, 58368, 58368, 1024, 2048, 0x0d2cf57a
+1, 58368, 58368, 1024, 2048, 0x26f2040d
+0, 59392, 59392, 1024, 2048, 0xc43ff8d2
+1, 59392, 59392, 1024, 2048, 0x4013f301
+0, 60416, 60416, 1024, 2048, 0x1a530323
+1, 60416, 60416, 1024, 2048, 0xf6c8072e
+0, 61440, 61440, 1024, 2048, 0x7d1be839
+1, 61440, 61440, 1024, 2048, 0x997bf4a3
+0, 62464, 62464, 1024, 2048, 0xc4c9f00b
+1, 62464, 62464, 1024, 2048, 0xf27a07c6
+0, 63488, 63488, 1024, 2048, 0x5e66f970
+1, 63488, 63488, 1024, 2048, 0x975af847
+0, 64512, 64512, 1024, 2048, 0xe0d80160
+1, 64512, 64512, 1024, 2048, 0xbe95fd0d
+0, 65536, 65536, 1024, 2048, 0x1688f94a
+1, 65536, 65536, 1024, 2048, 0xb619fdb2
+0, 66560, 66560, 1024, 2048, 0x3f86efb6
+1, 66560, 66560, 1024, 2048, 0xf640fa3a
+0, 67584, 67584, 1024, 2048, 0x029aeee8
+1, 67584, 67584, 1024, 2048, 0x32660688
+0, 68608, 68608, 1024, 2048, 0x90660458
+1, 68608, 68608, 1024, 2048, 0x2f47f2d8
+0, 69632, 69632, 1024, 2048, 0x17a7f980
+1, 69632, 69632, 1024, 2048, 0x2c7c0abb
+0, 70656, 70656, 1024, 2048, 0x243ef4c5
+1, 70656, 70656, 1024, 2048, 0x251bf5a5
+0, 71680, 71680, 1024, 2048, 0x48aaef09
+1, 71680, 71680, 1024, 2048, 0x1e6e03d3
+0, 72704, 72704, 1024, 2048, 0xc1d6f48a
+1, 72704, 72704, 1024, 2048, 0x9512f7c5
+0, 73728, 73728, 1024, 2048, 0x9ff200a8
+1, 73728, 73728, 1024, 2048, 0x8dfbffae
+0, 74752, 74752, 1024, 2048, 0x48c1f90c
+1, 74752, 74752, 1024, 2048, 0xf782ffab
+0, 75776, 75776, 1024, 2048, 0xcc86f2c1
+1, 75776, 75776, 1024, 2048, 0x9adcf602
+0, 76800, 76800, 1024, 2048, 0xe7bae94e
+1, 76800, 76800, 1024, 2048, 0x3f0506e5
+0, 77824, 77824, 1024, 2048, 0x0ab101c8
+1, 77824, 77824, 1024, 2048, 0x4d67f7a6
+0, 78848, 78848, 1024, 2048, 0x8879f975
+1, 78848, 78848, 1024, 2048, 0xff2100b1
+0, 79872, 79872, 1024, 2048, 0x4d34f8a2
+1, 79872, 79872, 1024, 2048, 0xe1b3fa9b
+0, 80896, 80896, 1024, 2048, 0xe66bf01d
+1, 80896, 80896, 1024, 2048, 0x7d9cfe8c
+0, 81920, 81920, 1024, 2048, 0xfe44f027
+1, 81920, 81920, 1024, 2048, 0xadda0259
+0, 82944, 82944, 1024, 2048, 0x6a1100b4
+1, 82944, 82944, 1024, 2048, 0xe062fa7f
+0, 83968, 83968, 1024, 2048, 0x88a90369
+1, 83968, 83968, 1024, 2048, 0xbf7d01e1
+0, 84992, 84992, 1024, 2048, 0xa464ebd3
+1, 84992, 84992, 1024, 2048, 0x0b97faa3
+0, 86016, 86016, 1024, 2048, 0xd79df118
+1, 86016, 86016, 1024, 2048, 0x6c79fdf8
+0, 87040, 87040, 1024, 2048, 0x8dfcfb4d
+1, 87040, 87040, 1024, 2048, 0xacaa01aa
+0, 88064, 88064, 136, 272, 0x9cbd9307
+1, 88064, 88064, 136, 272, 0xbe838bd6
diff --git a/tests/ref/fate/filter-sendcmd-isolation b/tests/ref/fate/filter-sendcmd-isolation
new file mode 100644
index 0000000000..dc27bbfa21
--- /dev/null
+++ b/tests/ref/fate/filter-sendcmd-isolation
@@ -0,0 +1,184 @@
+#tb 0: 1/44100
+#media_type 0: audio
+#codec_id 0: pcm_s16le
+#sample_rate 0: 44100
+#channel_layout_name 0: mono
+#tb 1: 1/44100
+#media_type 1: audio
+#codec_id 1: pcm_s16le
+#sample_rate 1: 44100
+#channel_layout_name 1: mono
+0, 0, 0, 1024, 2048, 0xaf9eeccd
+1, 0, 0, 1024, 2048, 0x72dcf0cb
+0, 1024, 1024, 1024, 2048, 0x4a7cf116
+1, 1024, 1024, 1024, 2048, 0x89fc06b0
+0, 2048, 2048, 1024, 2048, 0x13fef62b
+1, 2048, 2048, 1024, 2048, 0x01aef583
+0, 3072, 3072, 1024, 2048, 0xfa880006
+1, 3072, 3072, 1024, 2048, 0x79be017e
+0, 4096, 4096, 1024, 2048, 0x2590f589
+1, 4096, 4096, 1024, 2048, 0xd00ffd65
+0, 5120, 5120, 1024, 2048, 0xc14df02b
+1, 5120, 5120, 1024, 2048, 0x4513fcf8
+0, 6144, 6144, 1024, 2048, 0x1f4becad
+1, 6144, 6144, 1024, 2048, 0x55a30411
+0, 7168, 7168, 1024, 2048, 0x1e4a0347
+1, 7168, 7168, 1024, 2048, 0x30f9f596
+0, 8192, 8192, 1024, 2048, 0x5d8100cc
+1, 8192, 8192, 1024, 2048, 0xbdf203a3
+0, 9216, 9216, 1024, 2048, 0xb507f059
+1, 9216, 9216, 1024, 2048, 0x466af89f
+0, 10240, 10240, 1024, 2048, 0x5e02f015
+1, 10240, 10240, 1024, 2048, 0xeb8bfe33
+0, 11264, 11264, 1024, 2048, 0xa159f96c
+1, 11264, 11264, 1024, 2048, 0x5335fe73
+0, 12288, 12288, 1024, 2048, 0xe336f868
+1, 12288, 12288, 1024, 2048, 0x159bff32
+0, 13312, 13312, 1024, 2048, 0x73dc01f6
+1, 13312, 13312, 1024, 2048, 0x1b81ff1e
+0, 14336, 14336, 1024, 2048, 0xc625ee66
+1, 14336, 14336, 1024, 2048, 0xaa2ffa70
+0, 15360, 15360, 1024, 2048, 0x5ae1eda2
+1, 15360, 15360, 1024, 2048, 0x0441004f
+0, 16384, 16384, 1024, 2048, 0x8379fed3
+1, 16384, 16384, 1024, 2048, 0x8433fb21
+0, 17408, 17408, 1024, 2048, 0xfc72fab2
+1, 17408, 17408, 1024, 2048, 0x6a9afe1d
+0, 18432, 18432, 1024, 2048, 0x12edf9bc
+1, 18432, 18432, 1024, 2048, 0x7bd2ff53
+0, 19456, 19456, 1024, 2048, 0x7348ea17
+1, 19456, 19456, 1024, 2048, 0xbe15fcfe
+0, 20480, 20480, 1024, 2048, 0x8243f498
+1, 20480, 20480, 1024, 2048, 0xfc12014a
+0, 21504, 21504, 1024, 2048, 0x2b79fa61
+1, 21504, 21504, 1024, 2048, 0x49dbf575
+0, 22528, 22528, 1024, 2048, 0xf0360382
+1, 22528, 22528, 1024, 2048, 0xfe400599
+0, 23552, 23552, 1024, 2048, 0xc0cdef11
+1, 23552, 23552, 1024, 2048, 0xd7bdf732
+0, 24576, 24576, 1024, 2048, 0x4fc5efa4
+1, 24576, 24576, 1024, 2048, 0xb70cffac
+0, 25600, 25600, 1024, 2048, 0x03d6f918
+1, 25600, 25600, 1024, 2048, 0xc46a015f
+0, 26624, 26624, 1024, 2048, 0x401d0159
+1, 26624, 26624, 1024, 2048, 0xcf07f9a9
+0, 27648, 27648, 1024, 2048, 0x84e1f9a0
+1, 27648, 27648, 1024, 2048, 0x108c06c2
+0, 28672, 28672, 1024, 2048, 0x7b62f020
+1, 28672, 28672, 1024, 2048, 0xd340f350
+0, 29696, 29696, 1024, 2048, 0x7eefee08
+1, 29696, 29696, 1024, 2048, 0x0a7b09f0
+0, 30720, 30720, 1024, 2048, 0x4badfcfa
+1, 30720, 30720, 1024, 2048, 0x4299ee71
+0, 31744, 31744, 1024, 2048, 0x02c1fedb
+1, 31744, 31744, 1024, 2048, 0x43ff060d
+0, 32768, 32768, 1024, 2048, 0x5ccfefb7
+1, 32768, 32768, 1024, 2048, 0xbe31fafb
+0, 33792, 33792, 1024, 2048, 0x7128f060
+1, 33792, 33792, 1024, 2048, 0xaaae01cb
+0, 34816, 34816, 1024, 2048, 0x1534f28c
+1, 34816, 34816, 1024, 2048, 0xa7abfd7f
+0, 35840, 35840, 1024, 2048, 0x1d16011a
+1, 35840, 35840, 1024, 2048, 0x0b0cf839
+0, 36864, 36864, 1024, 2048, 0xc29000ab
+1, 36864, 36864, 1024, 2048, 0x5cec0417
+0, 37888, 37888, 1024, 2048, 0x125fedca
+1, 37888, 37888, 1024, 2048, 0x6909f4f5
+0, 38912, 38912, 1024, 2048, 0x470aeed8
+1, 38912, 38912, 1024, 2048, 0xf89104fb
+0, 39936, 39936, 1024, 2048, 0x2a9effeb
+1, 39936, 39936, 1024, 2048, 0x51daf8c8
+0, 40960, 40960, 1024, 2048, 0x3b4ff8da
+1, 40960, 40960, 1024, 2048, 0xc66004f4
+0, 41984, 41984, 1024, 2048, 0x848afa85
+1, 41984, 41984, 1024, 2048, 0xd48efa17
+0, 43008, 43008, 1024, 2048, 0x18cdeff7
+1, 43008, 43008, 1024, 2048, 0xb6ed001a
+0, 44032, 44032, 1024, 2048, 0x0941ee89
+1, 44032, 44032, 1024, 2048, 0x595ffe38
+0, 45056, 45056, 1024, 2048, 0x178301e3
+1, 45056, 45056, 1024, 2048, 0xa808f774
+0, 46080, 46080, 1024, 2048, 0x2dc2fc01
+1, 46080, 46080, 1024, 2048, 0x849104d9
+0, 47104, 47104, 1024, 2048, 0x8ac0f3b5
+1, 47104, 47104, 1024, 2048, 0xd949f89a
+0, 48128, 48128, 1024, 2048, 0x7fa8eaf3
+1, 48128, 48128, 1024, 2048, 0x091600d3
+0, 49152, 49152, 1024, 2048, 0x5ff3fa4f
+1, 49152, 49152, 1024, 2048, 0x1a5dfcf8
+0, 50176, 50176, 1024, 2048, 0x6b56f9d0
+1, 50176, 50176, 1024, 2048, 0x1ea3fadb
+0, 51200, 51200, 1024, 2048, 0x3992ff22
+1, 51200, 51200, 1024, 2048, 0x4078002c
+0, 52224, 52224, 1024, 2048, 0x79aeeef4
+1, 52224, 52224, 1024, 2048, 0xd791f830
+0, 53248, 53248, 1024, 2048, 0xf6aceda2
+1, 53248, 53248, 1024, 2048, 0x6f210581
+0, 54272, 54272, 1024, 2048, 0x79fc0084
+1, 54272, 54272, 1024, 2048, 0x0ae3fa9b
+0, 55296, 55296, 1024, 2048, 0x0b6a0127
+1, 55296, 55296, 1024, 2048, 0x94e5feaa
+0, 56320, 56320, 1024, 2048, 0x4530f2bd
+1, 56320, 56320, 1024, 2048, 0x461f0199
+0, 57344, 57344, 1024, 2048, 0x084ef062
+1, 57344, 57344, 1024, 2048, 0x9841f901
+0, 58368, 58368, 1024, 2048, 0x0d2cf57a
+1, 58368, 58368, 1024, 2048, 0x26f2040d
+0, 59392, 59392, 1024, 2048, 0xc43ff8d2
+1, 59392, 59392, 1024, 2048, 0x4013f301
+0, 60416, 60416, 1024, 2048, 0x1a530323
+1, 60416, 60416, 1024, 2048, 0xf6c8072e
+0, 61440, 61440, 1024, 2048, 0x7d1be839
+1, 61440, 61440, 1024, 2048, 0x997bf4a3
+0, 62464, 62464, 1024, 2048, 0xc4c9f00b
+1, 62464, 62464, 1024, 2048, 0xf27a07c6
+0, 63488, 63488, 1024, 2048, 0x5e66f970
+1, 63488, 63488, 1024, 2048, 0x975af847
+0, 64512, 64512, 1024, 2048, 0xe0d80160
+1, 64512, 64512, 1024, 2048, 0xbe95fd0d
+0, 65536, 65536, 1024, 2048, 0x1688f94a
+1, 65536, 65536, 1024, 2048, 0xb619fdb2
+0, 66560, 66560, 1024, 2048, 0x3f86efb6
+1, 66560, 66560, 1024, 2048, 0xf640fa3a
+0, 67584, 67584, 1024, 2048, 0x029aeee8
+1, 67584, 67584, 1024, 2048, 0x32660688
+0, 68608, 68608, 1024, 2048, 0x90660458
+1, 68608, 68608, 1024, 2048, 0x2f47f2d8
+0, 69632, 69632, 1024, 2048, 0x17a7f980
+1, 69632, 69632, 1024, 2048, 0x2c7c0abb
+0, 70656, 70656, 1024, 2048, 0x243ef4c5
+1, 70656, 70656, 1024, 2048, 0x251bf5a5
+0, 71680, 71680, 1024, 2048, 0x48aaef09
+1, 71680, 71680, 1024, 2048, 0x1e6e03d3
+0, 72704, 72704, 1024, 2048, 0xc1d6f48a
+1, 72704, 72704, 1024, 2048, 0x9512f7c5
+0, 73728, 73728, 1024, 2048, 0x9ff200a8
+1, 73728, 73728, 1024, 2048, 0x8dfbffae
+0, 74752, 74752, 1024, 2048, 0x48c1f90c
+1, 74752, 74752, 1024, 2048, 0xf782ffab
+0, 75776, 75776, 1024, 2048, 0xcc86f2c1
+1, 75776, 75776, 1024, 2048, 0x9adcf602
+0, 76800, 76800, 1024, 2048, 0xe7bae94e
+1, 76800, 76800, 1024, 2048, 0x3f0506e5
+0, 77824, 77824, 1024, 2048, 0x0ab101c8
+1, 77824, 77824, 1024, 2048, 0x4d67f7a6
+0, 78848, 78848, 1024, 2048, 0x8879f975
+1, 78848, 78848, 1024, 2048, 0xff2100b1
+0, 79872, 79872, 1024, 2048, 0x4d34f8a2
+1, 79872, 79872, 1024, 2048, 0xe1b3fa9b
+0, 80896, 80896, 1024, 2048, 0xe66bf01d
+1, 80896, 80896, 1024, 2048, 0x7d9cfe8c
+0, 81920, 81920, 1024, 2048, 0xfe44f027
+1, 81920, 81920, 1024, 2048, 0xadda0259
+0, 82944, 82944, 1024, 2048, 0x6a1100b4
+1, 82944, 82944, 1024, 2048, 0xe062fa7f
+0, 83968, 83968, 1024, 2048, 0x88a90369
+1, 83968, 83968, 1024, 2048, 0xbf7d01e1
+0, 84992, 84992, 1024, 2048, 0xa464ebd3
+1, 84992, 84992, 1024, 2048, 0x0b97faa3
+0, 86016, 86016, 1024, 2048, 0xd79df118
+1, 86016, 86016, 1024, 2048, 0x6c79fdf8
+0, 87040, 87040, 1024, 2048, 0x8dfcfb4d
+1, 87040, 87040, 1024, 2048, 0xacaa01aa
+0, 88064, 88064, 136, 272, 0x9cbd9307
+1, 88064, 88064, 136, 272, 0xbe838bd6
diff --git a/tests/ref/fate/filter-sendcmd-multi b/tests/ref/fate/filter-sendcmd-multi
new file mode 100644
index 0000000000..d2577a8c0d
--- /dev/null
+++ b/tests/ref/fate/filter-sendcmd-multi
@@ -0,0 +1,92 @@
+#tb 0: 1/44100
+#media_type 0: audio
+#codec_id 0: pcm_s16le
+#sample_rate 0: 44100
+#channel_layout_name 0: mono
+0, 0, 0, 1024, 2048, 0x644ce782
+0, 1024, 1024, 1024, 2048, 0x2629e9a5
+0, 2048, 2048, 1024, 2048, 0x6bcaf42a
+0, 3072, 3072, 1024, 2048, 0x531bf91f
+0, 4096, 4096, 1024, 2048, 0xaa2ff1d9
+0, 5120, 5120, 1024, 2048, 0xd59cea32
+0, 6144, 6144, 1024, 2048, 0xb228e86b
+0, 7168, 7168, 1024, 2048, 0x38defb3a
+0, 8192, 8192, 1024, 2048, 0xdb59f9fc
+0, 9216, 9216, 1024, 2048, 0x8c2aebc4
+0, 10240, 10240, 1024, 2048, 0x5478e9a5
+0, 11264, 11264, 1024, 2048, 0xc012f3d0
+0, 12288, 12288, 1024, 2048, 0xff2df54e
+0, 13312, 13312, 1024, 2048, 0x761cfa8d
+0, 14336, 14336, 1024, 2048, 0x0d18e84f
+0, 15360, 15360, 1024, 2048, 0x1c39e968
+0, 16384, 16384, 1024, 2048, 0x3429f885
+0, 17408, 17408, 1024, 2048, 0x08bbf474
+0, 18432, 18432, 1024, 2048, 0x7c05f37e
+0, 19456, 19456, 1024, 2048, 0x9a41e81e
+0, 20480, 20480, 1024, 2048, 0x454aecea
+0, 21504, 21504, 1024, 2048, 0x23daf6cb
+0, 22528, 22528, 1024, 2048, 0x447afdd1
+0, 23552, 23552, 1024, 2048, 0x17e0e7a6
+0, 24576, 24576, 1024, 2048, 0xd2ffeb69
+0, 25600, 25600, 1024, 2048, 0x3a48f325
+0, 26624, 26624, 1024, 2048, 0xbeabf844
+0, 27648, 27648, 1024, 2048, 0x66daf5e7
+0, 28672, 28672, 1024, 2048, 0x855bea2c
+0, 29696, 29696, 1024, 2048, 0xe8f1e71e
+0, 30720, 30720, 1024, 2048, 0x3dfcfa92
+0, 31744, 31744, 1024, 2048, 0xeb5ff891
+0, 32768, 32768, 1024, 2048, 0x2cc1ebf0
+0, 33792, 33792, 1024, 2048, 0x6fc1ea4d
+0, 34816, 34816, 1024, 2048, 0x7662eed9
+0, 35840, 35840, 1024, 2048, 0x5304f8a6
+0, 36864, 36864, 1024, 2048, 0xaf37fa6a
+0, 37888, 37888, 1024, 2048, 0xf806e97a
+0, 38912, 38912, 1024, 2048, 0x056ce788
+0, 39936, 39936, 1024, 2048, 0x2555fb0f
+0, 40960, 40960, 1024, 2048, 0x4f81f508
+0, 41984, 41984, 1024, 2048, 0x0c5af35b
+0, 43008, 43008, 1024, 2048, 0x7494ea97
+0, 44032, 44032, 1024, 2048, 0x4432ea5e
+0, 45056, 45056, 1024, 2048, 0x9669fa06
+0, 46080, 46080, 1024, 2048, 0x2981f71a
+0, 47104, 47104, 1024, 2048, 0x1605ec7a
+0, 48128, 48128, 1024, 2048, 0xea1ce88c
+0, 49152, 49152, 1024, 2048, 0x97f6f347
+0, 50176, 50176, 1024, 2048, 0xd444f503
+0, 51200, 51200, 1024, 2048, 0xaa93fb27
+0, 52224, 52224, 1024, 2048, 0x90c5e795
+0, 53248, 53248, 1024, 2048, 0x01cee96a
+0, 54272, 54272, 1024, 2048, 0x13affa54
+0, 55296, 55296, 1024, 2048, 0x29e1f8ab
+0, 56320, 56320, 1024, 2048, 0x4b52eef5
+0, 57344, 57344, 1024, 2048, 0x9280ea4d
+0, 58368, 58368, 1024, 2048, 0xe633edd7
+0, 59392, 59392, 1024, 2048, 0x335cf682
+0, 60416, 60416, 1024, 2048, 0x87c2fcaa
+0, 61440, 61440, 1024, 2048, 0xfc42e530
+0, 62464, 62464, 1024, 2048, 0x645fea23
+0, 63488, 63488, 1024, 2048, 0x24caf5cc
+0, 64512, 64512, 1024, 2048, 0xb536f848
+0, 65536, 65536, 1024, 2048, 0xf602f342
+0, 66560, 66560, 1024, 2048, 0xd42ceb6f
+0, 67584, 67584, 1024, 2048, 0x01c2e792
+0, 68608, 68608, 1024, 2048, 0x0f26fdbf
+0, 69632, 69632, 1024, 2048, 0x4cd2f6d9
+0, 70656, 70656, 1024, 2048, 0x3609ecfb
+0, 71680, 71680, 1024, 2048, 0x47b6ea20
+0, 72704, 72704, 1024, 2048, 0x0416f15e
+0, 73728, 73728, 1024, 2048, 0xe9f2f769
+0, 74752, 74752, 1024, 2048, 0x5727f59f
+0, 75776, 75776, 1024, 2048, 0x76c2eb7e
+0, 76800, 76800, 1024, 2048, 0xe73ae63c
+0, 77824, 77824, 1024, 2048, 0xf931fa7c
+0, 78848, 78848, 1024, 2048, 0x7552f554
+0, 79872, 79872, 1024, 2048, 0xdcebf3e7
+0, 80896, 80896, 1024, 2048, 0xff47e9aa
+0, 81920, 81920, 1024, 2048, 0xc86cebae
+0, 82944, 82944, 1024, 2048, 0xb19df9ed
+0, 83968, 83968, 1024, 2048, 0xf2dffb4a
+0, 84992, 84992, 1024, 2048, 0x4eaee87f
+0, 86016, 86016, 1024, 2048, 0x442eea2a
+0, 87040, 87040, 1024, 2048, 0xfc32f3c0
+0, 88064, 88064, 136, 272, 0x7fbe9483
--
2.34.1
_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]