diff options
Diffstat (limited to 'src/plugin.c')
-rw-r--r-- | src/plugin.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/plugin.c b/src/plugin.c index 39420e4..1ee7d35 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -75,6 +75,7 @@ static size_t written = 0; static int do_trigger = 0, triggered = 0; static struct pa_sample_spec sample_spec; static int locked_by_thread = 0; +static pa_volume_t saved_volume = PA_VOLUME_NORM; /* This function is from xmms' core */ gint ctrlsocket_get_session_id(void); @@ -166,6 +167,7 @@ static void stream_state_callback(struct pa_stream *s, void *userdata) { break; case PA_STREAM_READY: assert(current_request && current_request->message == MESSAGE_OPEN); + pa_operation_unref(pa_context_set_sink_input_volume(context, pa_stream_get_index(s), current_request->volume, NULL, NULL)); pa_operation_unref(pa_context_get_sink_input_info(context, pa_stream_get_index(s), info_callback, NULL)); finish_request(1); break; @@ -221,7 +223,7 @@ static void latency_callback(struct pa_stream *s, const struct pa_latency_info* assert(s == stream && s); assert(current_request && current_request->message == MESSAGE_LATENCY); if (i) { - current_request->latency = i->buffer_usec + i->sink_usec; + current_request->latency = i->buffer_usec + i->sink_usec + i->transport_usec; current_request->value = i->playing; } finish_request(!!i); @@ -440,7 +442,7 @@ static void polyp_get_volume(int *l, int *r) { execute_request(&req); if (!req.success) { - *l = *r = 100; + *l = *r = (saved_volume*100)/PA_VOLUME_NORM; return; } @@ -454,6 +456,8 @@ void polyp_set_volume(int l, int r) { req.message = MESSAGE_SETVOLUME; req.volume = ((l>r?l:r)*PA_VOLUME_NORM)/100; execute_request(&req); + + saved_volume = req.volume; } static void polyp_pause(short b) { @@ -511,7 +515,7 @@ static int polyp_get_output_time(void) { return 0; t = polyp_get_written_time(); - ms = r.latency/1000; + ms = (int) r.latency/1000; return ms > t ? 0 : t-ms+100; } @@ -573,6 +577,7 @@ static int polyp_open(AFormat fmt, int rate, int nch) { start_thread(); r.message = MESSAGE_OPEN; + r.volume = saved_volume; execute_request(&r); if (!r.success) { |