mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-05 13:29:57 -05:00
Support for setting volume on sources.
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@560 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
6cd225010f
commit
cc2178e5c3
11 changed files with 232 additions and 20 deletions
|
|
@ -77,8 +77,13 @@ pa_source* pa_source_new(
|
|||
s->outputs = pa_idxset_new(NULL, NULL);
|
||||
s->monitor_of = NULL;
|
||||
|
||||
pa_cvolume_reset(&s->sw_volume, spec->channels);
|
||||
pa_cvolume_reset(&s->hw_volume, spec->channels);
|
||||
|
||||
s->get_latency = NULL;
|
||||
s->notify = NULL;
|
||||
s->set_hw_volume = NULL;
|
||||
s->get_hw_volume = NULL;
|
||||
s->userdata = NULL;
|
||||
|
||||
r = pa_idxset_put(core->sources, s, &s->index);
|
||||
|
|
@ -110,6 +115,8 @@ void pa_source_disconnect(pa_source *s) {
|
|||
|
||||
s->get_latency = NULL;
|
||||
s->notify = NULL;
|
||||
s->get_hw_volume = NULL;
|
||||
s->set_hw_volume = NULL;
|
||||
|
||||
s->state = PA_SOURCE_DISCONNECTED;
|
||||
pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SOURCE | PA_SUBSCRIPTION_EVENT_REMOVE, s->index);
|
||||
|
|
@ -173,7 +180,14 @@ void pa_source_post(pa_source*s, const pa_memchunk *chunk) {
|
|||
assert(chunk);
|
||||
|
||||
pa_source_ref(s);
|
||||
|
||||
if (!pa_cvolume_is_norm(&s->sw_volume)) {
|
||||
pa_memchunk_make_writable(chunk, s->core->memblock_stat, 0);
|
||||
pa_volume_memchunk(chunk, &s->sample_spec, &s->sw_volume);
|
||||
}
|
||||
|
||||
pa_idxset_foreach(s->outputs, do_post, (void*) chunk);
|
||||
|
||||
pa_source_unref(s);
|
||||
}
|
||||
|
||||
|
|
@ -194,3 +208,40 @@ pa_usec_t pa_source_get_latency(pa_source *s) {
|
|||
return s->get_latency(s);
|
||||
}
|
||||
|
||||
void pa_source_set_volume(pa_source *s, pa_mixer_t m, const pa_cvolume *volume) {
|
||||
pa_cvolume *v;
|
||||
|
||||
assert(s);
|
||||
assert(s->ref >= 1);
|
||||
assert(volume);
|
||||
|
||||
if (m == PA_MIXER_HARDWARE && s->set_hw_volume)
|
||||
v = &s->hw_volume;
|
||||
else
|
||||
v = &s->sw_volume;
|
||||
|
||||
if (pa_cvolume_equal(v, volume))
|
||||
return;
|
||||
|
||||
*v = *volume;
|
||||
|
||||
if (v == &s->hw_volume)
|
||||
if (s->set_hw_volume(s) < 0)
|
||||
s->sw_volume = *volume;
|
||||
|
||||
pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SOURCE|PA_SUBSCRIPTION_EVENT_CHANGE, s->index);
|
||||
}
|
||||
|
||||
const pa_cvolume *pa_source_get_volume(pa_source *s, pa_mixer_t m) {
|
||||
assert(s);
|
||||
assert(s->ref >= 1);
|
||||
|
||||
if (m == PA_MIXER_HARDWARE && s->set_hw_volume) {
|
||||
|
||||
if (s->get_hw_volume)
|
||||
s->get_hw_volume(s);
|
||||
|
||||
return &s->hw_volume;
|
||||
} else
|
||||
return &s->sw_volume;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue