static void producer(void *_q) { pa_asyncq *q = _q; int i; for (i = 0; i < 1000; i++) { printf("pushing %i\n", i); pa_asyncq_push(q, PA_UINT_TO_PTR(i+1), 1); } pa_asyncq_push(q, PA_UINT_TO_PTR(-1), TRUE); printf("pushed end\n"); }
int main(int argc, char*argv[]) { unsigned n; pa_log_set_level(PA_LOG_INFO); srand((unsigned) time(NULL)); if (argc >= 3) { msec_lower = atoi(argv[1]); msec_upper = atoi(argv[2]); } else if (argc >= 2) { msec_lower = 0; msec_upper = atoi(argv[1]); } else { msec_lower = 0; msec_upper = 1000; } pa_assert(msec_upper > 0); pa_assert(msec_upper >= msec_lower); pa_log_notice("Creating random latencies in the range of %ims to %ims.", msec_lower, msec_upper); for (n = 1; n < pa_ncpus(); n++) { pa_assert_se(pa_thread_new("rtstutter", work, PA_UINT_TO_PTR(n))); } work(PA_INT_TO_PTR(0)); return 0; }
static void consumer(void *_q) { pa_asyncq *q = _q; void *p; int i; pa_msleep(1000); for (i = 0;; i++) { p = pa_asyncq_pop(q, TRUE); if (p == PA_UINT_TO_PTR(-1)) break; pa_assert(p == PA_UINT_TO_PTR(i+1)); printf("popped %i\n", i); } printf("popped end\n"); }
static void cmtspeech_dl_sideinfo_bogus(struct userdata *u) { unsigned int spc_flags = VOICE_SIDEINFO_FLAG_BAD|VOICE_SIDEINFO_FLAG_BOGUS; pa_assert(u); if (NULL == u->voice_sideinfoq) return; pa_queue_push(u->voice_sideinfoq, PA_UINT_TO_PTR(spc_flags)); u->continuous_dl_stream = FALSE; }
static void cmtspeech_dl_sideinfo_push(unsigned int cmt_spc_flags, int length, struct userdata *u) { unsigned int spc_flags; pa_assert(length % u->dl_frame_size == 0); pa_assert(u); if (NULL == u->voice_sideinfoq) return; spc_flags = cmtspeech_to_voice_spc_flags(cmt_spc_flags); spc_flags |= VOICE_SIDEINFO_FLAG_BOGUS; while (length) { pa_queue_push(u->local_sideinfoq, PA_UINT_TO_PTR(spc_flags)); length -= u->dl_frame_size; } }
static void cmtspeech_dl_sideinfo_forward(struct userdata *u) { unsigned int spc_flags = 0; pa_assert(u); if (NULL == u->voice_sideinfoq) return; spc_flags = PA_PTR_TO_UINT(pa_queue_pop(u->local_sideinfoq)); if (spc_flags == 0) { pa_log_warn("Local sideinfo queue empty."); spc_flags = VOICE_SIDEINFO_FLAG_BAD|VOICE_SIDEINFO_FLAG_BOGUS; } else if (!u->continuous_dl_stream) spc_flags |= VOICE_SIDEINFO_FLAG_BAD; u->continuous_dl_stream = TRUE; pa_queue_push(u->voice_sideinfoq, PA_UINT_TO_PTR(spc_flags)); }
/* Called from main context */ int pa_source_output_set_rate(pa_source_output *o, uint32_t rate) { pa_source_output_assert_ref(o); pa_assert_ctl_context(); pa_assert(PA_SOURCE_OUTPUT_IS_LINKED(o->state)); pa_return_val_if_fail(o->thread_info.resampler, -PA_ERR_BADSTATE); if (o->sample_spec.rate == rate) return 0; o->sample_spec.rate = rate; pa_asyncmsgq_post(o->source->asyncmsgq, PA_MSGOBJECT(o), PA_SOURCE_OUTPUT_MESSAGE_SET_RATE, PA_UINT_TO_PTR(rate), 0, NULL, NULL); pa_subscription_post(o->core, PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_CHANGE, o->index); return 0; }
/* Called from main context */ static void source_output_set_state(pa_source_output *o, pa_source_output_state_t state) { pa_assert(o); pa_assert_ctl_context(); if (o->state == state) return; pa_assert_se(pa_asyncmsgq_send(o->source->asyncmsgq, PA_MSGOBJECT(o), PA_SOURCE_OUTPUT_MESSAGE_SET_STATE, PA_UINT_TO_PTR(state), 0, NULL) == 0); update_n_corked(o, state); o->state = state; if (state != PA_SOURCE_OUTPUT_UNLINKED) { pa_hook_fire(&o->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_STATE_CHANGED], o); if (PA_SOURCE_OUTPUT_IS_LINKED(state)) pa_subscription_post(o->core, PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_CHANGE, o->index); } pa_source_update_status(o->source); }