static int cbjack_graph_order_callback(void * arg) { cubeb * ctx = (cubeb *)arg; int i; uint32_t rate; jack_latency_range_t latency_range; jack_nframes_t port_latency, max_latency = 0; for (int j = 0; j < MAX_STREAMS; j++) { cubeb_stream *stm = &ctx->streams[j]; if (!stm->in_use) continue; if (!stm->ports_ready) continue; for (i = 0; i < (int)stm->out_params.channels; ++i) { api_jack_port_get_latency_range(stm->output_ports[i], JackPlaybackLatency, &latency_range); port_latency = latency_range.max; if (port_latency > max_latency) max_latency = port_latency; } /* Cap minimum latency to 128 frames */ if (max_latency < 128) max_latency = 128; } if (cbjack_get_preferred_sample_rate(ctx, &rate) == CUBEB_ERROR) ctx->jack_latency = (max_latency * 1000) / 48000; else ctx->jack_latency = (max_latency * 1000) / rate; return 0; }
static int cbjack_graph_order_callback(void * arg) { cubeb * ctx = (cubeb *)arg; int i; jack_latency_range_t latency_range; jack_nframes_t port_latency, max_latency = 0; for (int j = 0; j < MAX_STREAMS; j++) { cubeb_stream *stm = &ctx->streams[j]; if (!stm->in_use) continue; if (!stm->ports_ready) continue; for (i = 0; i < (int)stm->out_params.channels; ++i) { api_jack_port_get_latency_range(stm->output_ports[i], JackPlaybackLatency, &latency_range); port_latency = latency_range.max; if (port_latency > max_latency) max_latency = port_latency; } /* Cap minimum latency to 128 frames */ if (max_latency < 128) max_latency = 128; } ctx->jack_latency = max_latency; return 0; }