mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
* issue volume updates syncrhonously
* correct channel order of OSS volumes (swap left,right) git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@962 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
0fb63e7b0a
commit
59d00e2f49
1 changed files with 18 additions and 5 deletions
|
|
@ -1074,8 +1074,8 @@ static int mixer_ioctl(fd_info *i, unsigned long request, void*argp, int *_errno
|
||||||
pa_threaded_mainloop_lock(i->mainloop);
|
pa_threaded_mainloop_lock(i->mainloop);
|
||||||
|
|
||||||
*(int*) argp =
|
*(int*) argp =
|
||||||
((i->volume.values[0]*100/PA_VOLUME_NORM) << 8) |
|
((i->volume.values[0]*100/PA_VOLUME_NORM)) |
|
||||||
((i->volume.values[i->volume.channels > 1 ? 1 : 0]*100/PA_VOLUME_NORM));
|
((i->volume.values[i->volume.channels > 1 ? 1 : 0]*100/PA_VOLUME_NORM) << 8);
|
||||||
|
|
||||||
pa_threaded_mainloop_unlock(i->mainloop);
|
pa_threaded_mainloop_unlock(i->mainloop);
|
||||||
|
|
||||||
|
|
@ -1090,16 +1090,29 @@ static int mixer_ioctl(fd_info *i, unsigned long request, void*argp, int *_errno
|
||||||
|
|
||||||
v = i->volume;
|
v = i->volume;
|
||||||
|
|
||||||
i->volume.values[0] = ((*(int*) argp >> 8)*PA_VOLUME_NORM)/100;
|
i->volume.values[0] = ((*(int*) argp & 0xFF)*PA_VOLUME_NORM)/100;
|
||||||
i->volume.values[1] = ((*(int*) argp & 0xFF)*PA_VOLUME_NORM)/100;
|
i->volume.values[1] = ((*(int*) argp >> 8)*PA_VOLUME_NORM)/100;
|
||||||
|
|
||||||
if (!pa_cvolume_equal(&i->volume, &v)) {
|
if (!pa_cvolume_equal(&i->volume, &v)) {
|
||||||
pa_operation *o;
|
pa_operation *o;
|
||||||
|
|
||||||
if (!(o = pa_context_set_sink_volume_by_index(i->context, i->sink_index, &i->volume, NULL, NULL)))
|
if (!(o = pa_context_set_sink_volume_by_index(i->context, i->sink_index, &i->volume, NULL, NULL)))
|
||||||
debug(__FILE__":Failed set volume: %s", pa_strerror(pa_context_errno(i->context)));
|
debug(__FILE__":Failed set volume: %s", pa_strerror(pa_context_errno(i->context)));
|
||||||
else
|
else {
|
||||||
|
|
||||||
|
i->operation_success = 0;
|
||||||
|
while (pa_operation_get_state(o) != PA_OPERATION_DONE) {
|
||||||
|
CONTEXT_CHECK_DEAD_GOTO(i, exit_loop);
|
||||||
|
|
||||||
|
pa_threaded_mainloop_wait(i->mainloop);
|
||||||
|
}
|
||||||
|
exit_loop:
|
||||||
|
|
||||||
|
if (!i->operation_success)
|
||||||
|
debug(__FILE__": Failed to set volume: %s\n", pa_strerror(pa_context_errno(i->context)));
|
||||||
|
|
||||||
pa_operation_unref(o);
|
pa_operation_unref(o);
|
||||||
|
}
|
||||||
|
|
||||||
/* We don't wait for completion here */
|
/* We don't wait for completion here */
|
||||||
i->volume_modify_count++;
|
i->volume_modify_count++;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue