From 40ac0d3109c4baeb10a04b503c6e6213c75d7779 Mon Sep 17 00:00:00 2001 From: cehoyos Date: Sun, 11 Apr 2010 18:59:19 +0000 Subject: Add slave commands for loading and unloading audio filters at runtime. Patch by Jehan Hysseo, hysseo zemarmot net git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31030 b3059339-0415-0410-9bf9-f77b7e298cf2 --- AUTHORS | 3 +++ DOCS/tech/slave.txt | 11 +++++++++++ command.c | 37 +++++++++++++++++++++++++++++++++++++ input/input.c | 5 +++++ input/input.h | 7 +++++++ 5 files changed, 63 insertions(+) diff --git a/AUTHORS b/AUTHORS index ed2c0bfdaa..0bca9f4ab9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -385,6 +385,9 @@ Hůrka, Tomáš * Darwin DVD support (mpdvdkit2) * various fixes +Hysseo, Jehan + * af_add, af_switch, af_del, af_clr commands. + Isani, Sidik * get_delay() smoothing code (-autosync) * RTC initialization fixes diff --git a/DOCS/tech/slave.txt b/DOCS/tech/slave.txt index e33165e178..a2e249dbe5 100644 --- a/DOCS/tech/slave.txt +++ b/DOCS/tech/slave.txt @@ -45,6 +45,17 @@ Various tips and tricks (please help expand it!): Available commands ('mplayer -input cmdlist' will print a list): +af_add (comma separated list of audio filters with parameters) + (experimental) Load the given list of audio filters. + +af_clr + (experimental) Unload all loaded audio filters. + +af_del (comma separated list of audio filter's names) + (experimental) Unload the first occurrence of the filters, if loaded. + +af_switch (comma separated list of audio filters with parameters) + (experimental) Remove all the audio filters and replace them with the given list. alt_src_step (ASX playlist only) When more than one source is available it selects the next/previous one. diff --git a/command.c b/command.c index 76c2e7a767..8095b6b00b 100644 --- a/command.c +++ b/command.c @@ -3242,6 +3242,43 @@ int run_command(MPContext * mpctx, mp_cmd_t * cmd) #endif + case MP_CMD_AF_SWITCH: + if (sh_audio) + { + af_uninit(mpctx->mixer.afilter); + af_init(mpctx->mixer.afilter); + } + case MP_CMD_AF_ADD: + case MP_CMD_AF_DEL: + if (!sh_audio) + break; + { + char* af_args = strdup(cmd->args[0].v.s); + char* af_commands = af_args; + char* af_command; + af_instance_t* af; + while ((af_command = strsep(&af_commands, ",")) != NULL) + { + if (cmd->id == MP_CMD_AF_DEL) + { + af = af_get(mpctx->mixer.afilter, af_command); + if (af != NULL) + af_remove(mpctx->mixer.afilter, af); + } + else + af_add(mpctx->mixer.afilter, af_command); + } + build_afilter_chain(sh_audio, &ao_data); + free(af_args); + } + break; + case MP_CMD_AF_CLR: + if (!sh_audio) + break; + af_uninit(mpctx->mixer.afilter); + af_init(mpctx->mixer.afilter); + build_afilter_chain(sh_audio, &ao_data); + break; default: #ifdef CONFIG_GUI if ((use_gui) && (cmd->id > MP_CMD_GUI_EVENTS)) diff --git a/input/input.c b/input/input.c index 7e679119ea..0bcd5752af 100644 --- a/input/input.c +++ b/input/input.c @@ -209,6 +209,11 @@ static const mp_cmd_t mp_cmds[] = { { MP_CMD_SEEK_CHAPTER, "seek_chapter", 1, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } }, { MP_CMD_SET_MOUSE_POS, "set_mouse_pos", 2, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } }, + { MP_CMD_AF_SWITCH, "af_switch", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } }, + { MP_CMD_AF_ADD, "af_add", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } }, + { MP_CMD_AF_DEL, "af_del", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } }, + { MP_CMD_AF_CLR, "af_clr", 0, { {-1,{0}} } }, + { 0, NULL, 0, {} } }; diff --git a/input/input.h b/input/input.h index 2df3f03932..69c6d4b959 100644 --- a/input/input.h +++ b/input/input.h @@ -162,6 +162,13 @@ typedef enum { MP_CMD_CHELP = 7000, MP_CMD_CEXIT, MP_CMD_CHIDE, + + /// Audio Filter commands + MP_CMD_AF_SWITCH, + MP_CMD_AF_ADD, + MP_CMD_AF_DEL, + MP_CMD_AF_CLR, + } mp_command_type; // The arg types -- cgit v1.2.3