--- mplayer-1.0~rc1/libao2/ao_pulse.c~ 2007-09-02 11:20:45.000000000 +0200 +++ mplayer-1.0~rc1/libao2/ao_pulse.c 2007-09-01 23:58:05.000000000 +0200 @@ -501,6 +501,8 @@ ao_control_vol_t *vol = (ao_control_vol_t*) arg; pa_operation *o; + pa_threaded_mainloop_lock(mainloop); + if (!(o = pa_context_get_sink_input_info(context, pa_stream_get_index(stream), info_func, NULL))) { mp_msg(MSGT_AO, MSGL_ERR, "AO: [pulse] pa_stream_get_sink_input_info() failed: %s\n", pa_strerror(pa_context_errno(context))); return CONTROL_ERROR; @@ -514,6 +516,8 @@ fail: pa_operation_unref(o); + pa_threaded_mainloop_unlock(mainloop); + if (!volume_initialized) { mp_msg(MSGT_AO, MSGL_ERR, "AO: [pulse] pa_stream_get_sink_input_info() failed: %s\n", pa_strerror(pa_context_errno(context))); return CONTROL_ERROR; @@ -534,6 +538,8 @@ const ao_control_vol_t *vol = (ao_control_vol_t*) arg; pa_operation *o; + pa_threaded_mainloop_lock(mainloop); + if (!volume_initialized) { pa_cvolume_reset(&volume, 2); volume_initialized = 1; @@ -546,13 +552,18 @@ volume.values[1] = ((pa_volume_t) vol->right*PA_VOLUME_NORM)/100; } + if (!(o = pa_context_set_sink_input_volume(context, pa_stream_get_index(stream), &volume, NULL, NULL))) { mp_msg(MSGT_AO, MSGL_ERR, "AO: [pulse] pa_context_set_sink_input_volume() failed: %s\n", pa_strerror(pa_context_errno(context))); + + pa_threaded_mainloop_unlock(mainloop); return CONTROL_ERROR; } pa_operation_unref(o); + pa_threaded_mainloop_unlock(mainloop); + /* We don't wait for completion here */ return CONTROL_OK;