On 2009/06/02 00:50, Dustin Puckett <puck...@pobox.com> wrote: > I'm working on an output plugin for RAOP/AirTunes/Airport Express. I > am at the point where I am able to stream to one or more devices, but > it is a mess, and there are still issues with managing the connection > (pause, cancel, close). Currently, it is using the software mixer > (because I'm building off the 0.14 source), which is annoying because > it takes ~20 seconds for any volume changes take effect.
You mean this problem? http://musicpd.org/mantis/view.php?id=2356 > Since there can be multiple RAOP devices, each RAOP mixer would need > a reference to some information in the RAOP output. (I don't believe > sharing the configuration information is enough, because we can't > just open a second command channel to send volume requests.) > Should the mixer look up the Audio Output which it is managing, and > access everything it needs through that? (I think that would violate > all sorts of standards for decency.) No, the API should provide a way for the mixer_plugin's init() function to receive a reference to the associated audio_output object. Patch welcome. > Right now, each mixer plugin has a corresponding output plugin. Are > there going to be mixer plugins that apply to multiple output > plugins? I can imagine software mixers applying to multiple output > plugins, but it seems like the hardware mixers are going to be > closely tied to each other. > (I guess it would be possible that the output is hooked up to a > physical mixer which could have its volume controlled.) The software mixer is a special case, that's not a mixer_plugin. I am not sure if mixers could ever be associated with more than one audio output. I don't think so. The APIs are separate mostly for historic reasons, and for the reason that ALSA and OSS don't provide a way for identifying the "right" mixer control for a specific PCM device. > What if, the mixer_plugin method is removed from audio_output_plugin, > and replaced with get/set volume methods. > If an output has a mixer associated with it, that mixer will be used > to control the volume. > If an output's output plugin supports setvolume, it will be used to > control the volume. > Otherwise a software mixer will be used. > This should be able to do everything the current design can, it > removes an outside dependency (mixer_api.h), and offers access to > richer functionality offered by audio devices. mixer_api.h isn't included from output_plugin.h. I think the mixer_plugin should stay separate from output_plugin (on the API side), but internally, you could have one "module" exposing an implementation for both output and mixer API. > Or maybe add a create_mixer method to audio_output_plugin? That sounds like a good idea. I'm really unsure how to design the "perfect" output/mixer API, and how they should interconnect - some users expect the ALSA mixer to work even when not playing, but the Pulse mixer cannot work without its output being open - just to name one difficult design decision (somewhat solved that with the mixer_plugin.global flag). Max ------------------------------------------------------------------------------ OpenSolaris 2009.06 is a cutting edge operating system for enterprises looking to deploy the next generation of Solaris that includes the latest innovations from Sun and the OpenSource community. Download a copy and enjoy capabilities such as Networking, Storage and Virtualization. Go to: http://p.sf.net/sfu/opensolaris-get _______________________________________________ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team