pa_sink_get_latency(u->master->sink_input->sink);
}
+static void sink_notify(pa_sink *s) {
+ struct userdata *u;
+ struct output *o;
+
+ assert(s);
+ u = s->userdata;
+ assert(u);
+
+ for (o = u->outputs; o; o = o->next)
+ pa_sink_notify(o->sink_input->sink);
+}
+
static struct output *output_new(struct userdata *u, pa_sink *sink, int resample_method) {
struct output *o = NULL;
char t[256];
0,
NULL);
- snprintf(t, sizeof(t), "%s: output #%u", u->sink->name, u->n_outputs+1);
+ snprintf(t, sizeof(t), "Output stream #%u of sink %s", u->n_outputs+1, u->sink->name);
pa_sink_input_new_data_init(&data);
data.sink = sink;
}
pa_sink_set_owner(u->sink, m);
- pa_sink_set_description(u->sink, "Combined sink");
+ pa_sink_set_description(u->sink, "Combined Sink");
u->sink->get_latency = sink_get_latency_cb;
+ u->sink->notify = sink_notify;
u->sink->userdata = u;
if (!(u->master = output_new(u, master_sink, resample_method))) {
pa_pstream_send_memblock(u->pstream, u->channel, 0, PA_SEEK_RELATIVE, &chunk);
pa_memblock_unref(chunk.memblock);
+/* pa_log("sent %lu", (unsigned long) chunk.length); */
+
if (chunk.length > u->requested_bytes)
u->requested_bytes = 0;
else
pa_gettimeofday(&now);
+ /* FIXME! This could use some serious love. */
+
if (pa_timeval_cmp(&local, &remote) < 0 && pa_timeval_cmp(&remote, &now)) {
/* local and remote seem to have synchronized clocks */
#ifdef TUNNEL_SINK
u->host_latency = 0;
#endif
-/* pa_log("estimated host latency: %0.0f usec", (double) u->host_latency); */
+/* pa_log("estimated host latency: %0.0f usec", (double) u->host_latency); */
}
static void request_latency(struct userdata *u) {
die(u);
}
-
static void pstream_packet_callback(pa_pstream *p, pa_packet *packet, const pa_creds *creds, void *userdata) {
struct userdata *u = userdata;
assert(p && packet && u);
return 0;
}
+
#else
static pa_usec_t source_get_latency(pa_source *source) {
struct userdata *u;
goto fail;
}
- u->sink->notify = sink_notify;
u->sink->get_latency = sink_get_latency;
u->sink->get_hw_volume = sink_get_hw_volume;
u->sink->set_hw_volume = sink_set_hw_volume;
u->sink->get_hw_mute = sink_get_hw_mute;
u->sink->set_hw_mute = sink_set_hw_mute;
+ u->sink->notify = sink_notify;
u->sink->userdata = u;
pa_sink_set_description(u->sink, t = pa_sprintf_malloc("Tunnel to %s%s%s", u->sink_name ? u->sink_name : "", u->sink_name ? " on " : "", u->server_name));
pa_xfree(t);