Lines Matching refs:sink

27 #include <pulsecore/sink.h>
35 PA_MODULE_DESCRIPTION("Virtual channel remapping sink");
39 "sink_name=<name for the sink> "
40 "sink_properties=<properties for the sink> "
41 "master=<name of sink to remap> "
53 pa_sink *sink;
81 /* The sink is _put() before the sink input is, so let's
83 if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
90 /* Get the latency of the master sink */
91 pa_sink_get_latency_within_thread(u->sink_input->sink, true) +
93 /* Add the latency internal to our sink input on top */
94 pa_bytes_to_usec(pa_memblockq_get_length(u->sink_input->thread_info.render_memblockq), &u->sink_input->sink->sample_spec);
128 * of the master sink to make sure we are heard immediately */
144 if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
158 if (!PA_SINK_IS_LINKED(u->sink->thread_info.state) ||
162 /* Just hand this one over to the master sink */
176 if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
180 pa_sink_process_rewind(u->sink, 0);
182 pa_sink_render(u->sink, nbytes, chunk);
194 /* If the sink is not yet linked, there is nothing to rewind */
195 if (!PA_SINK_IS_LINKED(u->sink->thread_info.state))
198 if (u->sink->thread_info.rewind_nbytes > 0) {
199 amount = PA_MIN(u->sink->thread_info.rewind_nbytes, nbytes);
200 u->sink->thread_info.rewind_nbytes = 0;
203 pa_sink_process_rewind(u->sink, amount);
215 pa_sink_set_max_rewind_within_thread(u->sink, nbytes);
225 pa_sink_set_max_request_within_thread(u->sink, nbytes);
235 pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
245 pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
255 if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
256 pa_sink_detach_within_thread(u->sink);
258 pa_sink_set_rtpoll(u->sink, NULL);
268 pa_sink_set_rtpoll(u->sink, i->sink->thread_info.rtpoll);
269 pa_sink_set_latency_range_within_thread(u->sink, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
270 pa_sink_set_fixed_latency_within_thread(u->sink, i->sink->thread_info.fixed_latency);
271 pa_sink_set_max_request_within_thread(u->sink, pa_sink_input_get_max_request(i));
275 pa_sink_set_max_rewind_within_thread(u->sink, pa_sink_input_get_max_rewind(i));
277 if (PA_SINK_IS_LINKED(u->sink->thread_info.state))
278 pa_sink_attach_within_thread(u->sink);
288 /* The order here matters! We first kill the sink so that streams
289 * can properly be moved away while the sink input is still connected
292 pa_sink_unlink(u->sink);
298 pa_sink_unref(u->sink);
299 u->sink = NULL;
312 pa_sink_set_asyncmsgq(u->sink, dest->asyncmsgq);
313 pa_sink_update_flags(u->sink, PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY, dest->flags);
315 pa_sink_set_asyncmsgq(u->sink, NULL);
325 pa_sink_update_proplist(u->sink, PA_UPDATE_REPLACE, pl);
349 pa_log("Master sink not found");
388 /* Create sink */
412 u->sink = pa_sink_new(m->core, &sink_data, master->flags & (PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY));
415 if (!u->sink) {
416 pa_log("Failed to create sink.");
420 u->sink->parent.process_msg = sink_process_msg;
421 u->sink->set_state_in_main_thread = sink_set_state_in_main_thread;
422 u->sink->set_state_in_io_thread = sink_set_state_in_io_thread_cb;
423 u->sink->update_requested_latency = sink_update_requested_latency;
424 u->sink->request_rewind = sink_request_rewind;
425 u->sink->userdata = u;
427 pa_sink_set_asyncmsgq(u->sink, master->asyncmsgq);
429 /* Create sink input */
434 sink_input_data.origin_sink = u->sink;
460 u->sink->input_to_master = u->sink_input;
463 * otherwise streams might attach to the sink before the sink
466 pa_sink_put(u->sink);
488 return pa_sink_linked_by(u->sink);
505 if (u->sink)
506 pa_sink_unlink(u->sink);
513 if (u->sink)
514 pa_sink_unref(u->sink);