mirror of
https://github.com/mpv-player/mpv
synced 2025-04-17 20:58:20 +00:00
command: add af-command command
Similar to vf-command. Requested. Untested.
This commit is contained in:
parent
4c25f49236
commit
f176104ed5
@ -700,6 +700,9 @@ Input Commands that are Possibly Subject to Change
|
|||||||
specific. Currently, this only works with the ``lavfi`` filter - see
|
specific. Currently, this only works with the ``lavfi`` filter - see
|
||||||
the libavfilter documentation for which commands a filter supports.
|
the libavfilter documentation for which commands a filter supports.
|
||||||
|
|
||||||
|
``af-command "<label>" "<cmd>" "<args>"``
|
||||||
|
Same as ``vf-command``, but for video filters.
|
||||||
|
|
||||||
Undocumented commands: ``tv-last-channel`` (TV/DVB only),
|
Undocumented commands: ``tv-last-channel`` (TV/DVB only),
|
||||||
``ao-reload`` (experimental/internal).
|
``ao-reload`` (experimental/internal).
|
||||||
|
|
||||||
|
@ -696,6 +696,17 @@ int af_control_by_label(struct af_stream *s, int cmd, void *arg, bstr label)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int af_send_command(struct af_stream *s, char *label, char *cmd, char *arg)
|
||||||
|
{
|
||||||
|
char *args[2] = {cmd, arg};
|
||||||
|
if (strcmp(label, "all") == 0) {
|
||||||
|
af_control_all(s, AF_CONTROL_COMMAND, args);
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return af_control_by_label(s, AF_CONTROL_COMMAND, args, bstr0(label));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Used by filters to add a filtered frame to the output queue.
|
// Used by filters to add a filtered frame to the output queue.
|
||||||
// Ownership of frame is transferred from caller to the filter chain.
|
// Ownership of frame is transferred from caller to the filter chain.
|
||||||
void af_add_output_frame(struct af_instance *af, struct mp_audio *frame)
|
void af_add_output_frame(struct af_instance *af, struct mp_audio *frame)
|
||||||
|
@ -124,6 +124,7 @@ enum af_control {
|
|||||||
AF_CONTROL_SET_PLAYBACK_SPEED,
|
AF_CONTROL_SET_PLAYBACK_SPEED,
|
||||||
AF_CONTROL_SET_PLAYBACK_SPEED_RESAMPLE,
|
AF_CONTROL_SET_PLAYBACK_SPEED_RESAMPLE,
|
||||||
AF_CONTROL_GET_METADATA,
|
AF_CONTROL_GET_METADATA,
|
||||||
|
AF_CONTROL_COMMAND,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Argument for AF_CONTROL_SET_PAN_LEVEL
|
// Argument for AF_CONTROL_SET_PAN_LEVEL
|
||||||
@ -144,6 +145,7 @@ struct af_instance *af_control_any_rev(struct af_stream *s, int cmd, void *arg);
|
|||||||
void af_control_all(struct af_stream *s, int cmd, void *arg);
|
void af_control_all(struct af_stream *s, int cmd, void *arg);
|
||||||
int af_control_by_label(struct af_stream *s, int cmd, void *arg, bstr label);
|
int af_control_by_label(struct af_stream *s, int cmd, void *arg, bstr label);
|
||||||
void af_seek_reset(struct af_stream *s);
|
void af_seek_reset(struct af_stream *s);
|
||||||
|
int af_send_command(struct af_stream *s, char *label, char *cmd, char *arg);
|
||||||
|
|
||||||
void af_add_output_frame(struct af_instance *af, struct mp_audio *frame);
|
void af_add_output_frame(struct af_instance *af, struct mp_audio *frame);
|
||||||
int af_filter_frame(struct af_stream *s, struct mp_audio *frame);
|
int af_filter_frame(struct af_stream *s, struct mp_audio *frame);
|
||||||
|
@ -222,6 +222,14 @@ static int control(struct af_instance *af, int cmd, void *arg)
|
|||||||
|
|
||||||
return mp_audio_config_equals(in, &orig_in) ? AF_OK : AF_FALSE;
|
return mp_audio_config_equals(in, &orig_in) ? AF_OK : AF_FALSE;
|
||||||
}
|
}
|
||||||
|
case AF_CONTROL_COMMAND: {
|
||||||
|
if (!p->graph)
|
||||||
|
break;
|
||||||
|
char **args = arg;
|
||||||
|
return avfilter_graph_send_command(p->graph, "all",
|
||||||
|
args[0], args[1], &(char){0}, 0, 0)
|
||||||
|
>= 0 ? CONTROL_OK : CONTROL_ERROR;
|
||||||
|
}
|
||||||
case AF_CONTROL_GET_METADATA:
|
case AF_CONTROL_GET_METADATA:
|
||||||
if (p->metadata) {
|
if (p->metadata) {
|
||||||
*(struct mp_tags *)arg = *p->metadata;
|
*(struct mp_tags *)arg = *p->metadata;
|
||||||
|
@ -180,6 +180,7 @@ const struct mp_cmd_def mp_cmds[] = {
|
|||||||
{ MP_CMD_DROP_BUFFERS, "drop-buffers", },
|
{ MP_CMD_DROP_BUFFERS, "drop-buffers", },
|
||||||
|
|
||||||
{ MP_CMD_AF, "af", { ARG_STRING, ARG_STRING } },
|
{ MP_CMD_AF, "af", { ARG_STRING, ARG_STRING } },
|
||||||
|
{ MP_CMD_AF_COMMAND, "af-command", { ARG_STRING, ARG_STRING, ARG_STRING } },
|
||||||
{ MP_CMD_AO_RELOAD, "ao-reload", },
|
{ MP_CMD_AO_RELOAD, "ao-reload", },
|
||||||
|
|
||||||
{ MP_CMD_VF, "vf", { ARG_STRING, ARG_STRING } },
|
{ MP_CMD_VF, "vf", { ARG_STRING, ARG_STRING } },
|
||||||
|
@ -92,6 +92,7 @@ enum mp_command_type {
|
|||||||
|
|
||||||
/// Audio Filter commands
|
/// Audio Filter commands
|
||||||
MP_CMD_AF,
|
MP_CMD_AF,
|
||||||
|
MP_CMD_AF_COMMAND,
|
||||||
MP_CMD_AO_RELOAD,
|
MP_CMD_AO_RELOAD,
|
||||||
|
|
||||||
/// Video filter commands
|
/// Video filter commands
|
||||||
|
@ -4937,6 +4937,12 @@ int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *re
|
|||||||
return vf_send_command(mpctx->vo_chain->vf, cmd->args[0].v.s,
|
return vf_send_command(mpctx->vo_chain->vf, cmd->args[0].v.s,
|
||||||
cmd->args[1].v.s, cmd->args[2].v.s);
|
cmd->args[1].v.s, cmd->args[2].v.s);
|
||||||
|
|
||||||
|
case MP_CMD_AF_COMMAND:
|
||||||
|
if (!mpctx->ao_chain)
|
||||||
|
return -1;
|
||||||
|
return af_send_command(mpctx->ao_chain->af, cmd->args[0].v.s,
|
||||||
|
cmd->args[1].v.s, cmd->args[2].v.s);
|
||||||
|
|
||||||
case MP_CMD_SCRIPT_BINDING: {
|
case MP_CMD_SCRIPT_BINDING: {
|
||||||
mpv_event_client_message event = {0};
|
mpv_event_client_message event = {0};
|
||||||
char *name = cmd->args[0].v.s;
|
char *name = cmd->args[0].v.s;
|
||||||
|
Loading…
Reference in New Issue
Block a user