Mercurial > mplayer.hg
changeset 30988:8d840754a921
Add slave commands for loading and unloading audio filters at runtime.
Patch by Jehan Hysseo, hysseo zemarmot net
author | cehoyos |
---|---|
date | Sun, 11 Apr 2010 18:59:19 +0000 |
parents | e1483ae3d93c |
children | 686241d65b86 |
files | AUTHORS DOCS/tech/slave.txt command.c input/input.c input/input.h |
diffstat | 5 files changed, 63 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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 <hysseo@zemarmot.net> + * af_add, af_switch, af_del, af_clr commands. + Isani, Sidik <lksi@cfht.hawaii.edu> * get_delay() smoothing code (-autosync) * RTC initialization fixes
--- 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 <filter_arguments_list> (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 <filter_name_list> (comma separated list of audio filter's names) + (experimental) Unload the first occurrence of the filters, if loaded. + +af_switch <filter_arguments_list> (comma separated list of audio filters with parameters) + (experimental) Remove all the audio filters and replace them with the given list. alt_src_step <value> (ASX playlist only) When more than one source is available it selects the next/previous one.
--- 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))
--- 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, {} } };
--- 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