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