本文整理汇总了C++中pa_threaded_mainloop_start函数的典型用法代码示例。如果您正苦于以下问题:C++ pa_threaded_mainloop_start函数的具体用法?C++ pa_threaded_mainloop_start怎么用?C++ pa_threaded_mainloop_start使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pa_threaded_mainloop_start函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: vlc_mutex_lock
/**
* Creates and references the VLC PulseAudio threaded main loop.
* @return the mainloop or NULL on failure
*/
static pa_threaded_mainloop *vlc_pa_mainloop_init (void)
{
pa_threaded_mainloop *mainloop;
vlc_mutex_lock (&lock);
if (refs == 0)
{
mainloop = pa_threaded_mainloop_new ();
if (unlikely(mainloop == NULL))
goto out;
if (pa_threaded_mainloop_start (mainloop) < 0)
{
pa_threaded_mainloop_free (mainloop);
goto out;
}
vlc_pa_mainloop = mainloop;
}
else
{
if (unlikely(refs < UINT_MAX))
{
mainloop = NULL;
goto out;
}
mainloop = vlc_pa_mainloop;
}
assert (mainloop != NULL);
refs++;
out:
vlc_mutex_unlock (&lock);
return mainloop;
}
示例2: pulse_enumerate_devices
/*
* enumerate input/output devices
*/
static void pulse_enumerate_devices(obs_properties_t props, bool input)
{
pa_context *c;
pa_operation *op;
pa_threaded_mainloop *m = pa_threaded_mainloop_new();
struct pulse_enumerate e;
e.mainloop = m;
e.devices = obs_properties_add_list(props, "device_id", "Device",
OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
e.input = input;
pa_threaded_mainloop_start(m);
c = pulse_context_create(m);
if (pulse_context_connect(m, c) < 0)
goto fail;
pa_threaded_mainloop_lock(m);
op = pa_context_get_source_info_list(c, pulse_source_info, (void *) &e);
while (pa_operation_get_state(op) == PA_OPERATION_RUNNING)
pa_threaded_mainloop_wait(m);
pa_operation_unref(op);
pa_threaded_mainloop_unlock(m);
pa_context_disconnect(c);
fail:
pa_context_unref(c);
pa_threaded_mainloop_stop(m);
pa_threaded_mainloop_free(m);
}
示例3: guac_pa_start_stream
void guac_pa_start_stream(guac_client* client) {
vnc_guac_client_data* client_data = (vnc_guac_client_data*) client->data;
pa_context* context;
guac_client_log_info(client, "Starting audio stream");
guac_audio_stream_begin(client_data->audio,
GUAC_VNC_AUDIO_RATE,
GUAC_VNC_AUDIO_CHANNELS,
GUAC_VNC_AUDIO_BPS);
/* Init main loop */
client_data->pa_mainloop = pa_threaded_mainloop_new();
/* Create context */
context = pa_context_new(
pa_threaded_mainloop_get_api(client_data->pa_mainloop),
"Guacamole Audio");
/* Set up context */
pa_context_set_state_callback(context, __context_state_callback, client);
pa_context_connect(context, client_data->pa_servername,
PA_CONTEXT_NOAUTOSPAWN, NULL);
/* Start loop */
pa_threaded_mainloop_start(client_data->pa_mainloop);
}
示例4: audio_pa_init
int
audio_pa_init(void)
{
pa_audio_mode_t *pam;
audio_mode_t *am;
TRACE(TRACE_DEBUG, "PA", "Headerversion: %s, library: %s",
pa_get_headers_version(), pa_get_library_version());
mainloop = pa_threaded_mainloop_new();
api = pa_threaded_mainloop_get_api(mainloop);
pa_threaded_mainloop_lock(mainloop);
pa_threaded_mainloop_start(mainloop);
pa_threaded_mainloop_unlock(mainloop);
pam = calloc(1, sizeof(pa_audio_mode_t));
am = &pam->am;
am->am_multich_controls = 1;
am->am_formats =
AM_FORMAT_PCM_STEREO | AM_FORMAT_PCM_5DOT1 | AM_FORMAT_PCM_7DOT1;
am->am_sample_rates = AM_SR_ANY;
am->am_title = strdup("Pulseaudio");
am->am_id = strdup("pulseaudio");
am->am_preferred_size = 1024;
am->am_entry = pa_audio_start;
am->am_float = 1;
audio_mode_register(am);
return 1;
}
示例5: moko_notify_init
static void
moko_notify_init (MokoNotify *notify)
{
MokoNotifyPrivate *priv;
pa_threaded_mainloop *mainloop = NULL;
pa_mainloop_api *mapi = NULL;
priv = notify->priv = MOKO_NOTIFY_GET_PRIVATE (notify);
priv->started = 0;
priv->pac = NULL;
/* Start up pulse audio */
mainloop = pa_threaded_mainloop_new ();
if (!mainloop)
{
g_warning ("Unable to create PulseAudio mainloop.");
return;
}
mapi = pa_threaded_mainloop_get_api (mainloop);
priv->pac = pa_context_new (mapi, "Openmoko Dialer");
if (!priv->pac)
{
g_warning ("Could create the PulseAudio context");
return;
}
pa_context_connect (priv->pac, NULL, 0, NULL);
pa_threaded_mainloop_start (mainloop);
}
示例6: pa_threaded_mainloop_new
context_t *backend_new(callback_t *callback) {
context_t *context = (context_t*)malloc(sizeof(context_t));
context->loop = pa_threaded_mainloop_new();
context->state = PA_CONTEXT_UNCONNECTED;
backend_init(context, callback);
pa_threaded_mainloop_start(context->loop);
return context;
}
示例7: xmms_pulse_backend_new
/*
* Public API.
*/
xmms_pulse *
xmms_pulse_backend_new (const char *server, const char *name,
int *rerror)
{
xmms_pulse *p;
int error = PA_ERR_INTERNAL;
if (server && !*server) {
if (rerror)
*rerror = PA_ERR_INVALID;
return NULL;
}
p = g_new0 (xmms_pulse, 1);
if (!p)
return NULL;
p->volume = 100;
p->mainloop = pa_threaded_mainloop_new ();
if (!p->mainloop)
goto fail;
p->context = pa_context_new (pa_threaded_mainloop_get_api (p->mainloop), name);
if (!p->context)
goto fail;
pa_context_set_state_callback (p->context, context_state_cb, p);
if (pa_context_connect (p->context, server, 0, NULL) < 0) {
error = pa_context_errno (p->context);
goto fail;
}
pa_threaded_mainloop_lock (p->mainloop);
if (pa_threaded_mainloop_start (p->mainloop) < 0)
goto unlock_and_fail;
/* Wait until the context is ready */
pa_threaded_mainloop_wait (p->mainloop);
if (pa_context_get_state (p->context) != PA_CONTEXT_READY) {
error = pa_context_errno (p->context);
goto unlock_and_fail;
}
pa_threaded_mainloop_unlock (p->mainloop);
return p;
unlock_and_fail:
pa_threaded_mainloop_unlock (p->mainloop);
fail:
if (rerror)
*rerror = error;
xmms_pulse_backend_free (p);
return NULL;
}
示例8: init_pulse_context
static void init_pulse_context(){
if (context==NULL){
pa_loop=pa_threaded_mainloop_new();
context=pa_context_new(pa_threaded_mainloop_get_api(pa_loop),NULL);
pa_context_set_state_callback(context,state_notify,NULL);
pa_context_connect(context,NULL,0,NULL);
pa_threaded_mainloop_start(pa_loop);
atexit(uninit_pulse_context);
}
}
示例9: pa_threaded_mainloop_get_api
void PulseAudioSinksManager::retrieveSinks()
{
pa_mainloop_api *pa_mlapi;
// Create a mainloop API and connection to the default server
pa_ml.reset(pa_threaded_mainloop_new());
pa_mlapi = pa_threaded_mainloop_get_api(pa_ml.get());
pa_ctx.reset(pa_context_new(pa_mlapi, "QAudioSwitcher"));
pa_context_set_state_callback(pa_ctx.get(), PulseAudioSinksManager::pulseAudioStateCallback, this);
pa_context_connect(pa_ctx.get(), NULL, PA_CONTEXT_NOFAIL , NULL);
pa_threaded_mainloop_start(pa_ml.get());
}
示例10: name_
WavegenClient::WavegenClient(std::string const& name)
: name_(name)
{
paMainLoop_ = pa_threaded_mainloop_new();
pa_threaded_mainloop_set_name(paMainLoop_, name_.c_str());
pa_threaded_mainloop_start(paMainLoop_);
paMainApi_ = pa_threaded_mainloop_get_api(paMainLoop_);
paContext_ = pa_context_new(paMainApi_, name_.c_str());
pa_context_set_state_callback(paContext_, &WavegenClient::contextStateCallback, this);
}
示例11: pa_context_set_state_callback
bool CPulseAE::Initialize()
{
m_Volume = g_settings.m_fVolumeLevel;
if ((m_MainLoop = pa_threaded_mainloop_new()) == NULL)
{
CLog::Log(LOGERROR, "PulseAudio: Failed to allocate main loop");
return false;
}
if ((m_Context = pa_context_new(pa_threaded_mainloop_get_api(m_MainLoop), "XBMC")) == NULL)
{
CLog::Log(LOGERROR, "PulseAudio: Failed to allocate context");
return false;
}
pa_context_set_state_callback(m_Context, ContextStateCallback, m_MainLoop);
if (pa_context_connect(m_Context, NULL, (pa_context_flags_t)0, NULL) < 0)
{
CLog::Log(LOGERROR, "PulseAudio: Failed to connect context");
return false;
}
pa_threaded_mainloop_lock(m_MainLoop);
if (pa_threaded_mainloop_start(m_MainLoop) < 0)
{
CLog::Log(LOGERROR, "PulseAudio: Failed to start MainLoop");
pa_threaded_mainloop_unlock(m_MainLoop);
return false;
}
/* Wait until the context is ready */
do
{
pa_threaded_mainloop_wait(m_MainLoop);
CLog::Log(LOGDEBUG, "PulseAudio: Context %s", ContextStateToString(pa_context_get_state(m_Context)));
}
while (pa_context_get_state(m_Context) != PA_CONTEXT_READY && pa_context_get_state(m_Context) != PA_CONTEXT_FAILED);
if (pa_context_get_state(m_Context) == PA_CONTEXT_FAILED)
{
CLog::Log(LOGERROR, "PulseAudio: Waited for the Context but it failed");
pa_threaded_mainloop_unlock(m_MainLoop);
return false;
}
pa_threaded_mainloop_unlock(m_MainLoop);
return true;
}
示例12: rdpsnd_pulse_connect
static int
rdpsnd_pulse_connect(rdpsndDevicePlugin * devplugin)
{
struct pulse_device_data * pulse_data;
pa_context_state_t state;
pulse_data = (struct pulse_device_data *) devplugin->device_data;
if (!pulse_data->context)
return 1;
if (pa_context_connect(pulse_data->context, NULL, 0, NULL))
{
LLOGLN(0, ("rdpsnd_pulse_connect: pa_context_connect failed (%d)",
pa_context_errno(pulse_data->context)));
return 1;
}
pa_threaded_mainloop_lock(pulse_data->mainloop);
if (pa_threaded_mainloop_start(pulse_data->mainloop) < 0)
{
pa_threaded_mainloop_unlock(pulse_data->mainloop);
LLOGLN(0, ("rdpsnd_pulse_connect: pa_threaded_mainloop_start failed (%d)",
pa_context_errno(pulse_data->context)));
return 1;
}
for (;;)
{
state = pa_context_get_state(pulse_data->context);
if (state == PA_CONTEXT_READY)
break;
if (!PA_CONTEXT_IS_GOOD(state))
{
LLOGLN(0, ("rdpsnd_pulse_connect: bad context state (%d)",
pa_context_errno(pulse_data->context)));
break;
}
pa_threaded_mainloop_wait(pulse_data->mainloop);
}
pa_threaded_mainloop_unlock(pulse_data->mainloop);
if (state == PA_CONTEXT_READY)
{
LLOGLN(0, ("rdpsnd_pulse_connect: connected"));
return 0;
}
else
{
pa_context_disconnect(pulse_data->context);
return 1;
}
}
示例13: pa_context_set_state_callback
bool CAESinkPULSE::SetupContext(const char *host, pa_context **context, pa_threaded_mainloop **mainloop)
{
if ((*mainloop = pa_threaded_mainloop_new()) == NULL)
{
CLog::Log(LOGERROR, "PulseAudio: Failed to allocate main loop");
return false;
}
if (((*context) = pa_context_new(pa_threaded_mainloop_get_api(*mainloop), "Kodi")) == NULL)
{
CLog::Log(LOGERROR, "PulseAudio: Failed to allocate context");
return false;
}
pa_context_set_state_callback(*context, ContextStateCallback, *mainloop);
if (pa_context_connect(*context, host, (pa_context_flags_t)0, NULL) < 0)
{
CLog::Log(LOGERROR, "PulseAudio: Failed to connect context");
return false;
}
pa_threaded_mainloop_lock(*mainloop);
if (pa_threaded_mainloop_start(*mainloop) < 0)
{
CLog::Log(LOGERROR, "PulseAudio: Failed to start MainLoop");
pa_threaded_mainloop_unlock(*mainloop);
return false;
}
/* Wait until the context is ready */
do
{
pa_threaded_mainloop_wait(*mainloop);
CLog::Log(LOGDEBUG, "PulseAudio: Context %s", ContextStateToString(pa_context_get_state(*context)));
}
while (pa_context_get_state(*context) != PA_CONTEXT_READY && pa_context_get_state(*context) != PA_CONTEXT_FAILED);
if (pa_context_get_state(*context) == PA_CONTEXT_FAILED)
{
CLog::Log(LOGERROR, "PulseAudio: Waited for the Context but it failed");
pa_threaded_mainloop_unlock(*mainloop);
return false;
}
pa_threaded_mainloop_unlock(*mainloop);
return true;
}
示例14: tsmf_pulse_connect
static int
tsmf_pulse_connect(TSMFPulseAudioDevice * pulse)
{
pa_context_state_t state;
if (!pulse->context)
return 1;
if (pa_context_connect(pulse->context, NULL, 0, NULL))
{
LLOGLN(0, ("tsmf_pulse_connect: pa_context_connect failed (%d)",
pa_context_errno(pulse->context)));
return 1;
}
pa_threaded_mainloop_lock(pulse->mainloop);
if (pa_threaded_mainloop_start(pulse->mainloop) < 0)
{
pa_threaded_mainloop_unlock(pulse->mainloop);
LLOGLN(0, ("tsmf_pulse_connect: pa_threaded_mainloop_start failed (%d)",
pa_context_errno(pulse->context)));
return 1;
}
for (;;)
{
state = pa_context_get_state(pulse->context);
if (state == PA_CONTEXT_READY)
break;
if (!PA_CONTEXT_IS_GOOD(state))
{
LLOGLN(0, ("tsmf_pulse_connect: bad context state (%d)",
pa_context_errno(pulse->context)));
break;
}
pa_threaded_mainloop_wait(pulse->mainloop);
}
pa_threaded_mainloop_unlock(pulse->mainloop);
if (state == PA_CONTEXT_READY)
{
LLOGLN(0, ("tsmf_pulse_connect: connected"));
return 0;
}
else
{
pa_context_disconnect(pulse->context);
return 1;
}
}
示例15: audin_pulse_connect
static tbool audin_pulse_connect(IAudinDevice* device)
{
pa_context_state_t state;
AudinPulseDevice* pulse = (AudinPulseDevice*) device;
if (!pulse->context)
return false;
if (pa_context_connect(pulse->context, NULL, 0, NULL))
{
DEBUG_WARN("pa_context_connect failed (%d)",
pa_context_errno(pulse->context));
return false;
}
pa_threaded_mainloop_lock(pulse->mainloop);
if (pa_threaded_mainloop_start(pulse->mainloop) < 0)
{
pa_threaded_mainloop_unlock(pulse->mainloop);
DEBUG_WARN("pa_threaded_mainloop_start failed (%d)",
pa_context_errno(pulse->context));
return false;
}
for (;;)
{
state = pa_context_get_state(pulse->context);
if (state == PA_CONTEXT_READY)
break;
if (!PA_CONTEXT_IS_GOOD(state))
{
DEBUG_WARN("bad context state (%d)",
pa_context_errno(pulse->context));
break;
}
pa_threaded_mainloop_wait(pulse->mainloop);
}
pa_threaded_mainloop_unlock(pulse->mainloop);
if (state == PA_CONTEXT_READY)
{
DEBUG_DVC("connected");
return true;
}
else
{
pa_context_disconnect(pulse->context);
return false;
}
}