# HG changeset patch # User cehoyos # Date 1271012359 0 # Node ID 8d840754a921c25e527825126a36abb9c42e2c54 # Parent e1483ae3d93c5ce19febd53c18013f73411d68c5 Add slave commands for loading and unloading audio filters at runtime. Patch by Jehan Hysseo, hysseo zemarmot net diff -r e1483ae3d93c -r 8d840754a921 AUTHORS --- a/AUTHORS Sun Apr 11 13:47:13 2010 +0000 +++ b/AUTHORS Sun Apr 11 18:59:19 2010 +0000 @@ -385,6 +385,9 @@ * 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 -r e1483ae3d93c -r 8d840754a921 DOCS/tech/slave.txt --- a/DOCS/tech/slave.txt Sun Apr 11 13:47:13 2010 +0000 +++ b/DOCS/tech/slave.txt Sun Apr 11 18:59:19 2010 +0000 @@ -45,6 +45,17 @@ 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 -r e1483ae3d93c -r 8d840754a921 command.c --- a/command.c Sun Apr 11 13:47:13 2010 +0000 +++ b/command.c Sun Apr 11 18:59:19 2010 +0000 @@ -3242,6 +3242,43 @@ #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 -r e1483ae3d93c -r 8d840754a921 input/input.c --- a/input/input.c Sun Apr 11 13:47:13 2010 +0000 +++ b/input/input.c Sun Apr 11 18:59:19 2010 +0000 @@ -209,6 +209,11 @@ { 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 -r e1483ae3d93c -r 8d840754a921 input/input.h --- a/input/input.h Sun Apr 11 13:47:13 2010 +0000 +++ b/input/input.h Sun Apr 11 18:59:19 2010 +0000 @@ -162,6 +162,13 @@ 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