summaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/alsa-util.c24
-rw-r--r--src/modules/alsa-util.h2
-rw-r--r--src/modules/module-alsa-sink.c8
-rw-r--r--src/modules/module-alsa-source.c9
-rw-r--r--src/modules/module-suspend-on-idle.c2
-rw-r--r--src/modules/module-tunnel.c9
6 files changed, 18 insertions, 36 deletions
diff --git a/src/modules/alsa-util.c b/src/modules/alsa-util.c
index c3eb72f5..ffe7795e 100644
--- a/src/modules/alsa-util.c
+++ b/src/modules/alsa-util.c
@@ -1109,27 +1109,3 @@ pa_rtpoll_item* pa_alsa_build_pollfd(snd_pcm_t *pcm, pa_rtpoll *rtpoll) {
return item;
}
-
-pa_cvolume *pa_alsa_volume_divide(pa_cvolume *r, const pa_cvolume *t) {
- unsigned i;
-
- pa_assert(r);
- pa_assert(t);
- pa_assert(r->channels == t->channels);
-
- for (i = 0; i < r->channels; i++) {
- double a, b, c;
-
- a = pa_sw_volume_to_linear(r->values[i]); /* the hw volume */
- b = pa_sw_volume_to_linear(t->values[i]); /* the intended volume */
-
- if (a <= 0)
- c = 0;
- else
- c = b / a;
-
- r->values[i] = pa_sw_volume_from_linear(c);
- }
-
- return r;
-}
diff --git a/src/modules/alsa-util.h b/src/modules/alsa-util.h
index 7991a107..b66adc13 100644
--- a/src/modules/alsa-util.h
+++ b/src/modules/alsa-util.h
@@ -92,6 +92,4 @@ int pa_alsa_recover_from_poll(snd_pcm_t *pcm, int revents);
pa_rtpoll_item* pa_alsa_build_pollfd(snd_pcm_t *pcm, pa_rtpoll *rtpoll);
-pa_cvolume *pa_alsa_volume_divide(pa_cvolume *r, const pa_cvolume *t);
-
#endif
diff --git a/src/modules/module-alsa-sink.c b/src/modules/module-alsa-sink.c
index 8f907745..0e15da3c 100644
--- a/src/modules/module-alsa-sink.c
+++ b/src/modules/module-alsa-sink.c
@@ -539,8 +539,8 @@ static int suspend(struct userdata *u) {
pa_smoother_pause(u->smoother, pa_rtclock_usec());
- /* Let's suspend */
- snd_pcm_drain(u->pcm_handle);
+ /* Let's suspend -- we don't call snd_pcm_drain() here since that might
+ * take awfully long with our long buffer sizes today. */
snd_pcm_close(u->pcm_handle);
u->pcm_handle = NULL;
@@ -569,7 +569,7 @@ static int update_sw_params(struct userdata *u) {
if ((latency = pa_sink_get_requested_latency_within_thread(u->sink)) != (pa_usec_t) -1) {
size_t b;
- pa_log_debug("latency set to %0.2f", (double) latency / PA_USEC_PER_MSEC);
+ pa_log_debug("latency set to %0.2fms", (double) latency / PA_USEC_PER_MSEC);
b = pa_usec_to_bytes(latency, &u->sink->sample_spec);
@@ -936,7 +936,7 @@ static int sink_set_volume_cb(pa_sink *s) {
/* Match exactly what the user requested by software */
- pa_alsa_volume_divide(&r, &s->volume);
+ pa_sw_cvolume_divide(&r, &s->volume, &r);
pa_sink_set_soft_volume(s, &r);
pa_log_debug("Requested volume: %s", pa_cvolume_snprint(t, sizeof(t), &s->volume));
diff --git a/src/modules/module-alsa-source.c b/src/modules/module-alsa-source.c
index d5e21704..2827ecfe 100644
--- a/src/modules/module-alsa-source.c
+++ b/src/modules/module-alsa-source.c
@@ -211,9 +211,10 @@ static int try_recover(struct userdata *u, const char *call, int err) {
static size_t check_left_to_record(struct userdata *u, snd_pcm_sframes_t n) {
size_t left_to_record;
+ size_t rec_space = u->hwbuf_size - (size_t) u->hwbuf_unused_frames*u->frame_size;
- if ((size_t) n*u->frame_size < u->hwbuf_size)
- left_to_record = u->hwbuf_size - ((size_t) n*u->frame_size);
+ if ((size_t) n*u->frame_size < rec_space)
+ left_to_record = rec_space - ((size_t) n*u->frame_size);
else
left_to_record = 0;
@@ -514,7 +515,7 @@ static int update_sw_params(struct userdata *u) {
if ((latency = pa_source_get_requested_latency_within_thread(u->source)) != (pa_usec_t) -1) {
size_t b;
- pa_log_debug("latency set to %0.2f", (double) latency / PA_USEC_PER_MSEC);
+ pa_log_debug("latency set to %0.2fms", (double) latency / PA_USEC_PER_MSEC);
b = pa_usec_to_bytes(latency, &u->source->sample_spec);
@@ -881,7 +882,7 @@ static int source_set_volume_cb(pa_source *s) {
/* Match exactly what the user requested by software */
- pa_alsa_volume_divide(&r, &s->volume);
+ pa_sw_cvolume_divide(&r, &s->volume, &r);
pa_source_set_soft_volume(s, &r);
pa_log_debug("Requested volume: %s", pa_cvolume_snprint(t, sizeof(t), &s->volume));
diff --git a/src/modules/module-suspend-on-idle.c b/src/modules/module-suspend-on-idle.c
index bc7c023c..6cc28ec5 100644
--- a/src/modules/module-suspend-on-idle.c
+++ b/src/modules/module-suspend-on-idle.c
@@ -337,7 +337,7 @@ static pa_hook_result_t device_state_changed_hook_cb(pa_core *c, pa_object *o, s
int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u;
- uint32_t timeout = 1;
+ uint32_t timeout = 5;
uint32_t idx;
pa_sink *sink;
pa_source *source;
diff --git a/src/modules/module-tunnel.c b/src/modules/module-tunnel.c
index de3c7274..4bbb11a5 100644
--- a/src/modules/module-tunnel.c
+++ b/src/modules/module-tunnel.c
@@ -159,7 +159,7 @@ static const pa_pdispatch_cb_t command_table[PA_COMMAND_MAX] = {
[PA_COMMAND_PLAYBACK_STREAM_SUSPENDED] = command_suspended,
[PA_COMMAND_RECORD_STREAM_SUSPENDED] = command_suspended,
[PA_COMMAND_PLAYBACK_STREAM_MOVED] = command_moved,
- [PA_COMMAND_RECORD_STREAM_MOVED] = command_moved,
+ [PA_COMMAND_RECORD_STREAM_MOVED] = command_moved
};
struct userdata {
@@ -1494,6 +1494,13 @@ static void setup_complete_callback(pa_pdispatch *pd, uint32_t command, uint32_t
#endif
}
+ if (u->version >= 14) {
+#ifdef TUNNEL_SINK
+ pa_tagstruct_put_boolean(reply, FALSE); /* volume_set */
+#endif
+ pa_tagstruct_put_boolean(reply, TRUE); /* early rquests */
+ }
+
pa_pstream_send_tagstruct(u->pstream, reply);
pa_pdispatch_register_reply(u->pdispatch, tag, DEFAULT_TIMEOUT, create_stream_callback, u, NULL);