}
void pa_source_output_disconnect(struct pa_source_output*o) {
- assert(o && o->state == PA_SOURCE_OUTPUT_RUNNING && o->source && o->source->core);
+ assert(o && o->state != PA_SOURCE_OUTPUT_DISCONNECTED && o->source && o->source->core);
pa_idxset_remove_by_data(o->source->core->source_outputs, o, NULL);
pa_idxset_remove_by_data(o->source->outputs, o, NULL);
struct pa_memchunk rchunk;
assert(o && chunk && chunk->length && o->push);
+ if (o->state == PA_SOURCE_OUTPUT_CORKED)
+ return;
+
if (!o->resampler) {
o->push(o, chunk);
return;
return 0;
}
+
+void pa_source_output_cork(struct pa_source_output *o, int b) {
+ assert(o && o->ref >= 1);
+
+ if (o->state == PA_SOURCE_OUTPUT_DISCONNECTED)
+ return;
+
+ o->state = b ? PA_SOURCE_OUTPUT_CORKED : PA_SOURCE_OUTPUT_RUNNING;
+}