Re: Pulseaudio alsa configure hook

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Apr 30, 2008 at 06:20:40PM +0200, Takashi Iwai wrote:
> At Sun, 27 Apr 2008 22:37:09 +0200,
> >   The attached patch extends the alsa pulse plugin set with a alsa
> >   configuration hook. Allowing one to specify some configuration parameters
> >   that only come into effect when pulseaudio is running.
> > 
> >   For example a configution file like:
> > 
> >     @hooks [ {
> >        func on_pulse_is_running
> >          pcm.!default { type pulse }
> >          ctl.!default { type pulse }
> >        }
> >    ]
> > 
> >   will redirect the default alsa pcm and ctl to pulse iff pulse is running.
> >   (Assuming you defined the hook function correctly ofcourse)

> This looks pretty interesting.
> I forgot that this kind of stuff can be also a plugin :)
> 
> Applied to HG tree now.

Thanks :).. Unfortunately some more testing revealed some issues with it,
specifically if pulse is running your complete config is replaced the bits in
the on_pulse_is_running directive. Which might not be what one actually wants :)

I couldn't find a proper solution for this. So i've changed the code to
optionally load config files. Just like the load hook does. Actually i just
optionally call the snd_config_hook_load function, but that's not actually in
the alsa API....

Also it now decides pulse is running as soon as the authorizing step begins
(just after the actually connection is setup), which should save some
round-trips and overhead.

Updated patch attached :)

  Sjoerd
-- 
For fast-acting relief, try slowing down.
diff -r 8b8cd8912f67 pulse/conf_pulse.c
--- a/pulse/conf_pulse.c	Wed Apr 30 20:18:15 2008 +0200
+++ b/pulse/conf_pulse.c	Sat May 10 21:28:23 2008 +0200
@@ -26,14 +26,19 @@
 #include <pulse/pulseaudio.h>
 
 
+/* Not actually part of the alsa api....  */
+extern int
+snd_config_hook_load (snd_config_t *root, snd_config_t *config,
+  snd_config_t **dst, snd_config_t *private_data);
+
 int
-conf_pulse_hook_on_is_running (snd_config_t *root, snd_config_t *config,
+conf_pulse_hook_load_if_running (snd_config_t *root, snd_config_t *config,
     snd_config_t **dst, snd_config_t *private_data) {
-  snd_config_t *n = NULL;
   pa_mainloop *loop = NULL;
   pa_context *context = NULL;
   int ret = 0, err, state;
 
+  *dst = NULL;
 
   /* Defined if we're called inside the pulsedaemon itself */
   if (getenv("PULSE_INTERNAL") != NULL)
@@ -65,12 +70,12 @@
       goto out;
 
     state = pa_context_get_state(context);
-  } while (state < PA_CONTEXT_READY);
+  } while (state < PA_CONTEXT_AUTHORIZING);
 
-  if (state != PA_CONTEXT_READY)
+  if (state > PA_CONTEXT_READY)
     goto out;
 
-  ret = snd_config_expand(config, root, NULL, private_data, &n);
+  ret = snd_config_hook_load(root, config, dst, private_data);
 
 out:
   if (context != NULL)
@@ -79,10 +84,8 @@
   if (loop != NULL)
     pa_mainloop_free(loop);
 
-  *dst = n;
-
   return ret;
 }
 
-SND_DLSYM_BUILD_VERSION(conf_pulse_hook_on_is_running,
+SND_DLSYM_BUILD_VERSION(conf_pulse_hook_load_if_running,
   SND_CONFIG_DLSYM_VERSION_HOOK);
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux