[pulseaudio-discuss] [RFC] Source Output Volumes

Arun Raghavan arun.raghavan at collabora.co.uk
Sun May 22 01:00:27 PDT 2011


On Fri, 2011-05-20 at 09:50 +0100, Colin Guthrie wrote:
> Hello,
> 
> As some of you know I've been working on restoring a little more
> symmetry to our API to allow the adjustment of source output (capture
> stream) volumes.

This is really nice to have - thanks!

> In the past, when stream volumes were added to sink inputs, it was
> thought that this feature wouldn't be overly useful for capture streams
> and while this argument still holds true, there is one feature that has
> since been added to PA that would make it useful - flat volumes.
> 
> Flat volumes allow for multiple streams to be connected to the same
> device and when they differ in stream volume, the maximum one is chosen
> and the h/w is set to that, with the difference in volume between the
> streams applied in software. This in theory allows for optimum power
> efficiency where the software stays out of the loop whenever possible.
> 
> With flat volumes, adding per-stream volumes to capture streams makes sense.
> 
> It does also simplify client code when they want to adjust their own
> volumes, they don't have to implement their own asymmetry to deal with ours.
> 
> 
> So I am proud to announce my work to try and achieve this. There are no
> doubt still bugs, so a thorough review is very much appreciated.
[...]

I've not been able to test things extensively yet, but some comments:

I've pushed a couple of patches on top of your tree, one trivial, one
adds a set-source-output-volume to pactl at
http://cgit.collabora.com/git/user/arun/pulseaudio.git/log/?h=master-source-volume

29cd2d78 capture: Add the passthrough format negitiation to capture
streams.
* There's typo in the commit message
* Just in case I forget, the fix we were discussion for ownwership of
the formats idxset in pa_sink_input_new_data_set_formats() needs to be
added to pa_source_output_new_data_set_formats() as well
* This is tangential to your work, but maybe we should just break
compatibility with versions older than 0.9.20? (protocol version < 17)
It'll make the code easier to read.

o94d2b5 capture: Implement per-stream volume control for capture
streams.
* I don't see the source output changes actually show up in the samples
(I'm opening two gnome-volume-recorder instances, doing a pactl
set-source-output-volume on one, but the levels are identical before and
after). Is there a missing pa_volume_memchunk in pa_source_output_push()
or am I just doing something stupid?
* module-echo-cancel.c - there's an s->volume inside #if 0
* [Not actually from your changes] pa_source_process_msg() - does it
matter that  the order of detach and set state within thread inverted
compared to sink-input?
* Again, this is for later, but we should eventually stop suspending
monitors and change the source format dynamically.

Will do some more extensive testing and port pulsesrc when I get some
time as well.

Cheers,
Arun




More information about the pulseaudio-discuss mailing list