本文整理汇总了C++中pa_modargs_get_value函数的典型用法代码示例。如果您正苦于以下问题:C++ pa_modargs_get_value函数的具体用法?C++ pa_modargs_get_value怎么用?C++ pa_modargs_get_value使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pa_modargs_get_value函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: pa__init
int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u;
pa_volume_t volume_limit = PA_CLAMP_VOLUME(PA_VOLUME_NORM*3/2);
pa_volume_t volume_step = PA_VOLUME_NORM/20;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments");
goto fail;
}
if (pa_modargs_get_value_u32(ma, "volume_limit", &volume_limit) < 0) {
pa_log("Failed to parse volume limit");
goto fail;
}
if (pa_modargs_get_value_u32(ma, "volume_step", &volume_step) < 0) {
pa_log("Failed to parse volume step");
goto fail;
}
m->userdata = u = pa_xnew(struct userdata, 1);
u->module = m;
u->io = NULL;
u->config = NULL;
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
u->lirc_fd = -1;
u->mute_toggle_save = 0;
u->volume_limit = PA_CLAMP_VOLUME(volume_limit);
u->volume_step = PA_CLAMP_VOLUME(volume_step);
if ((u->lirc_fd = lirc_init((char*) pa_modargs_get_value(ma, "appname", "pulseaudio"), 1)) < 0) {
pa_log("lirc_init() failed.");
goto fail;
}
if (lirc_readconfig((char*) pa_modargs_get_value(ma, "config", NULL), &u->config, NULL) < 0) {
pa_log("lirc_readconfig() failed.");
goto fail;
}
u->io = m->core->mainloop->io_new(m->core->mainloop, u->lirc_fd, PA_IO_EVENT_INPUT|PA_IO_EVENT_HANGUP, io_callback, u);
pa_modargs_free(ma);
return 0;
fail:
if (ma)
pa_modargs_free(ma);
pa__done(m);
return -1;
}
开发者ID:BYSTROSTREL,项目名称:pulseaudio,代码行数:57,代码来源:module-lirc.c
示例2: sidetone_args_new
/* parse sidetone configuration file parameters */
sidetone_args* sidetone_args_new(const char *args) {
pa_modargs* ma = NULL;
sidetone_args* st_args = NULL;
int count = 0 ;
st_args = pa_xnew0(sidetone_args, 1);
st_args->steps=pa_xnew0(struct mv_volume_steps, 1);
ma = pa_modargs_new(args, valid_modargs);
if(!ma) {
pa_log_error("Failed to parse module arguments");
goto fail;
}
st_args->modargs = ma;
if(!(st_args->mixer = pa_modargs_get_value(ma, "mixer", NULL))) {
pa_log_error("Failed to read mixer name");
goto fail;
}
if(!(st_args->control_element = pa_modargs_get_value(ma, "control_element", NULL))) {
pa_log_error("Failed to parse control element");
goto fail;
}
if( !(st_args->master_sink = pa_modargs_get_value(ma, "master_sink", NULL))) {
pa_log_error("Failed to parse master sink name");
goto fail;
}
if(!(st_args->mainvolume = pa_modargs_get_value(ma, "mainvolume", NULL))) {
pa_log_error("failed to search volume string");
}
count = parse_volume_steps(st_args->steps, st_args->mainvolume);
if (count < 1) {
pa_log_error("failed to parse call steps; %s", st_args->mainvolume);
goto fail;
}
return st_args;
fail:
sidetone_args_free(st_args);
return NULL;
}
开发者ID:maemo-foss,项目名称:maemo-multimedia-pulseaudio-modules-meego,代码行数:53,代码来源:sidetone-args.c
示例3: pa__init
int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u;
pa_bool_t restore_device = TRUE, restore_volume = TRUE;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments");
goto fail;
}
u = pa_xnew(struct userdata, 1);
u->core = m->core;
u->hashmap = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
u->table_file = pa_xstrdup(pa_modargs_get_value(ma, "table", NULL));
u->modified = FALSE;
u->subscription = NULL;
u->sink_input_new_hook_slot = u->sink_input_fixate_hook_slot = u->source_output_new_hook_slot = NULL;
u->save_time_event = NULL;
m->userdata = u;
if (pa_modargs_get_value_boolean(ma, "restore_device", &restore_device) < 0 ||
pa_modargs_get_value_boolean(ma, "restore_volume", &restore_volume) < 0) {
pa_log("restore_volume= and restore_device= expect boolean arguments");
goto fail;
}
if (!(restore_device || restore_volume)) {
pa_log("Both restrong the volume and restoring the device are disabled. There's no point in using this module at all then, failing.");
goto fail;
}
if (load_rules(u) < 0)
goto fail;
u->subscription = pa_subscription_new(m->core, PA_SUBSCRIPTION_MASK_SINK_INPUT|PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT, subscribe_callback, u);
if (restore_device) {
u->sink_input_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_INPUT_NEW], (pa_hook_cb_t) sink_input_new_hook_callback, u);
u->source_output_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_NEW], (pa_hook_cb_t) source_output_new_hook_callback, u);
}
if (restore_volume)
u->sink_input_fixate_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_INPUT_FIXATE], (pa_hook_cb_t) sink_input_fixate_hook_callback, u);
pa_modargs_free(ma);
return 0;
fail:
pa__done(m);
if (ma)
pa_modargs_free(ma);
return -1;
}
开发者ID:thewb,项目名称:mokoiax,代码行数:57,代码来源:module-volume-restore.c
示例4: pa_simple_options_parse
int pa_simple_options_parse(pa_simple_options *o, pa_core *c, pa_modargs *ma) {
bool enabled;
pa_assert(o);
pa_assert(PA_REFCNT_VALUE(o) >= 1);
pa_assert(ma);
o->sample_spec = c->default_sample_spec;
if (pa_modargs_get_sample_spec_and_channel_map(ma, &o->sample_spec, &o->channel_map, PA_CHANNEL_MAP_DEFAULT) < 0) {
pa_log("Failed to parse sample type specification.");
return -1;
}
pa_xfree(o->default_source);
o->default_source = pa_xstrdup(pa_modargs_get_value(ma, "source", NULL));
pa_xfree(o->default_sink);
o->default_sink = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
enabled = o->record;
if (pa_modargs_get_value_boolean(ma, "record", &enabled) < 0) {
pa_log("record= expects a boolean argument.");
return -1;
}
o->record = enabled;
enabled = o->playback;
if (pa_modargs_get_value_boolean(ma, "playback", &enabled) < 0) {
pa_log("playback= expects a boolean argument.");
return -1;
}
o->playback = enabled;
if (!o->playback && !o->record) {
pa_log("neither playback nor recording enabled for protocol.");
return -1;
}
return 0;
}
开发者ID:DryakhlyyZlodey,项目名称:pulseaudio,代码行数:40,代码来源:protocol-simple.c
示例5: pa__init
int pa__init(pa_module *m) {
struct userdata *u;
pa_modargs *ma;
int xtest_event_base, xtest_error_base;
int major_version, minor_version;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("failed to parse module arguments");
goto fail;
}
m->userdata = u = pa_xnew0(struct userdata, 1);
u->module = m;
if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
goto fail;
if (!XTestQueryExtension(
pa_x11_wrapper_get_display(u->x11_wrapper),
&xtest_event_base, &xtest_error_base,
&major_version, &minor_version)) {
pa_log("XTest extension not supported.");
goto fail;
}
pa_log_debug("XTest %i.%i supported.", major_version, minor_version);
u->x11_client = pa_x11_client_new(u->x11_wrapper, NULL, x11_kill_cb, u);
u->hook_slot = pa_hook_connect(
&m->core->hooks[PA_CORE_HOOK_SINK_INPUT_SEND_EVENT],
PA_HOOK_NORMAL,
(pa_hook_cb_t) sink_input_send_event_hook_cb, u);
pa_modargs_free(ma);
return 0;
fail:
if (ma)
pa_modargs_free(ma);
pa__done(m);
return -1;
}
开发者ID:Distrotech,项目名称:pulseaudio,代码行数:49,代码来源:module-x11-cork-request.c
示例6: pa_assert
pa_source *voice_get_original_master_source(struct userdata *u) {
const char *om_name;
pa_source *om_source;
pa_assert(u);
pa_assert(u->modargs);
pa_assert(u->core);
om_name = pa_modargs_get_value(u->modargs, "master_source", NULL);
if (!om_name) {
pa_log_error("Master source name not found from modargs!");
return NULL;
}
if (!(om_source = pa_namereg_get(u->core, om_name, PA_NAMEREG_SOURCE))) {
pa_log_error("Original master source \"%s\" not found", om_name);
return NULL;
}
return om_source;
}
开发者ID:community-ssu,项目名称:pulseaudio-nokia,代码行数:17,代码来源:voice-util.c
示例7: pa__init
int pa__init(pa_module *m) {
pa_modargs *ma = NULL;
const char *module_id;
DroidAfGlueCallbacks cb;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments.");
goto fail;
}
struct userdata *u = pa_xnew0(struct userdata, 1);
u->core = m->core;
m->userdata = u;
module_id = pa_modargs_get_value(ma, "module_id", DEFAULT_MODULE_ID);
if (!(u->hw_module = pa_droid_hw_module_get(u->core, NULL, module_id))) {
pa_log("Couldn't get hw module %s, is module-droid-card loaded?", module_id);
goto fail;
}
cb.set_parameters = set_parameters_cb;
cb.get_parameters = get_parameters_cb;
u->glue = droid_afglue_connect(&cb, u);
if (!u->glue) {
pa_log("Couldn't establish connection to miniafservice.");
goto fail;
}
return 0;
fail:
if (ma)
pa_modargs_free(ma);
pa__done(m);
return -1;
}
开发者ID:jusa,项目名称:pulseaudio-modules-droid-glue,代码行数:43,代码来源:module-droid-glue.c
示例8: source_set_name
static void source_set_name(pa_modargs *ma, pa_source_new_data *data, const char *module_id) {
const char *tmp;
pa_assert(ma);
pa_assert(data);
if ((tmp = pa_modargs_get_value(ma, "source_name", NULL))) {
pa_source_new_data_set_name(data, tmp);
data->namereg_fail = true;
pa_proplist_sets(data->proplist, PA_PROP_DEVICE_DESCRIPTION, "Droid source");
} else {
char *tt;
pa_assert(module_id);
tt = pa_sprintf_malloc("source.%s", module_id);
pa_source_new_data_set_name(data, tt);
pa_xfree(tt);
data->namereg_fail = false;
pa_proplist_setf(data->proplist, PA_PROP_DEVICE_DESCRIPTION, "Droid source %s", module_id);
}
}
开发者ID:morphis,项目名称:pulseaudio,代码行数:20,代码来源:droid-source.c
示例9: pa__init
int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments");
return -1;
}
m->userdata = u = pa_xnew(struct userdata, 1);
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink_name", DEFAULT_SINK_NAME));
u->put_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_PUT], PA_HOOK_LATE, (pa_hook_cb_t) put_hook_callback, u);
u->unlink_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SINK_UNLINK], PA_HOOK_EARLY, (pa_hook_cb_t) unlink_hook_callback, u);
u->null_module = PA_INVALID_INDEX;
u->ignore = FALSE;
pa_modargs_free(ma);
load_null_sink_if_needed(m->core, NULL, u);
return 0;
}
开发者ID:BYSTROSTREL,项目名称:pulseaudio,代码行数:24,代码来源:module-always-sink.c
示例10: pa__init
int pa__init(pa_module*m) {
struct userdata *u = NULL;
pa_sample_spec ss;
pa_channel_map map;
pa_modargs *ma = NULL;
jack_status_t status;
const char *server_name, *client_name;
uint32_t channels = 0;
pa_bool_t do_connect = TRUE;
unsigned i;
const char **ports = NULL, **p;
pa_sink_new_data data;
pa_assert(m);
jack_set_error_function(jack_error_func);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments.");
goto fail;
}
if (pa_modargs_get_value_boolean(ma, "connect", &do_connect) < 0) {
pa_log("Failed to parse connect= argument.");
goto fail;
}
server_name = pa_modargs_get_value(ma, "server_name", NULL);
client_name = pa_modargs_get_value(ma, "client_name", "PulseAudio JACK Sink");
m->userdata = u = pa_xnew0(struct userdata, 1);
u->core = m->core;
u->module = m;
u->saved_frame_time_valid = FALSE;
u->rtpoll = pa_rtpoll_new();
pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
/* The queue linking the JACK thread and our RT thread */
u->jack_msgq = pa_asyncmsgq_new(0);
/* The msgq from the JACK RT thread should have an even higher
* priority than the normal message queues, to match the guarantee
* all other drivers make: supplying the audio device with data is
* the top priority -- and as long as that is possible we don't do
* anything else */
u->rtpoll_item = pa_rtpoll_item_new_asyncmsgq_read(u->rtpoll, PA_RTPOLL_EARLY-1, u->jack_msgq);
if (!(u->client = jack_client_open(client_name, server_name ? JackServerName : JackNullOption, &status, server_name))) {
pa_log("jack_client_open() failed.");
goto fail;
}
ports = jack_get_ports(u->client, NULL, JACK_DEFAULT_AUDIO_TYPE, JackPortIsPhysical|JackPortIsInput);
channels = 0;
for (p = ports; *p; p++)
channels++;
if (!channels)
channels = m->core->default_sample_spec.channels;
if (pa_modargs_get_value_u32(ma, "channels", &channels) < 0 ||
channels <= 0 ||
channels > PA_CHANNELS_MAX) {
pa_log("Failed to parse channels= argument.");
goto fail;
}
if (channels == m->core->default_channel_map.channels)
map = m->core->default_channel_map;
else
pa_channel_map_init_extend(&map, channels, PA_CHANNEL_MAP_ALSA);
if (pa_modargs_get_channel_map(ma, NULL, &map) < 0 || map.channels != channels) {
pa_log("Failed to parse channel_map= argument.");
goto fail;
}
pa_log_info("Successfully connected as '%s'", jack_get_client_name(u->client));
u->channels = ss.channels = (uint8_t) channels;
ss.rate = jack_get_sample_rate(u->client);
ss.format = PA_SAMPLE_FLOAT32NE;
pa_assert(pa_sample_spec_valid(&ss));
for (i = 0; i < ss.channels; i++) {
if (!(u->port[i] = jack_port_register(u->client, pa_channel_position_to_string(map.map[i]), JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput|JackPortIsTerminal, 0))) {
pa_log("jack_port_register() failed.");
goto fail;
}
}
pa_sink_new_data_init(&data);
data.driver = __FILE__;
data.module = m;
pa_sink_new_data_set_name(&data, pa_modargs_get_value(ma, "sink_name", DEFAULT_SINK_NAME));
pa_sink_new_data_set_sample_spec(&data, &ss);
pa_sink_new_data_set_channel_map(&data, &map);
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_API, "jack");
//.........这里部分代码省略.........
开发者ID:almosthappy4u,项目名称:PulseAudio-UCM,代码行数:101,代码来源:module-jack-sink.c
示例11: pa__init
int pa__init(pa_module *m)
{
pa_modargs *ma;
const char *master_sink_name;
const char *master_source_name;
const char *max_hw_frag_size_str;
const char *aep_runtime;
pa_source *master_source;
struct userdata *u;
pa_proplist *p;
pa_sink *master_sink;
const char *raw_sink_name;
const char *raw_source_name;
const char *voice_sink_name;
const char *voice_source_name;
const char *dbus_type;
int max_hw_frag_size = 3840;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs)))
{
pa_log_error("Failed to parse module arguments");
goto fail;
}
voice_turn_sidetone_down();
master_sink_name = pa_modargs_get_value(ma, "master_sink", NULL);
master_source_name = pa_modargs_get_value(ma, "master_source", NULL);
raw_sink_name = pa_modargs_get_value(ma, "raw_sink_name", "sink.voice.raw");
raw_source_name = pa_modargs_get_value(ma, "raw_source_name",
"source.voice.raw");
voice_sink_name = pa_modargs_get_value(ma, "voice_sink_name", "sink.voice");
voice_source_name = pa_modargs_get_value(ma, "voice_source_name",
"source.voice");
dbus_type = pa_modargs_get_value(ma, "dbus_type", "session");
max_hw_frag_size_str = pa_modargs_get_value(ma, "max_hw_frag_size", "3840");
aep_runtime = pa_modargs_get_value(ma, "aep_runtime",
"bbaid1n-wr0-h9a22b--dbxpb--");
voice_set_aep_runtime_switch(aep_runtime);
pa_log_debug("Got arguments: master_sink=\"%s\" master_source=\"%s\" raw_sink_name=\"%s\" raw_source_name=\"%s\" dbus_type=\"%s\" max_hw_frag_size=\"%s\". ",
master_sink_name, master_source_name, raw_sink_name,
raw_source_name, dbus_type, max_hw_frag_size_str);
if (!(master_sink = pa_namereg_get(m->core, master_sink_name, PA_NAMEREG_SINK)))
{
pa_log("Master sink \"%s\" not found", master_sink_name);
goto fail;
}
if (!(master_source = pa_namereg_get(m->core, master_source_name, PA_NAMEREG_SOURCE)))
{
pa_log( "Master source \"%s\" not found", master_source_name);
goto fail;
}
if (master_sink->sample_spec.format != master_source->sample_spec.format &&
master_sink->sample_spec.rate != master_source->sample_spec.rate &&
master_sink->sample_spec.channels != master_source->sample_spec.channels)
{
pa_log("Master source and sink must have same sample spec");
goto fail;
}
if (pa_atoi(max_hw_frag_size_str, &max_hw_frag_size) < 0 ||
max_hw_frag_size < 960 ||
max_hw_frag_size > 128*960)
{
pa_log("Bad value for max_hw_frag_size: %s", max_hw_frag_size_str);
goto fail;
}
m->userdata = u = pa_xnew0(struct userdata, 1);
u->core = m->core;
u->module = m;
u->modargs = ma;
u->master_sink = master_sink;
u->master_source = master_source;
u->mainloop_handler = voice_mainloop_handler_new(u);;
u->ul_timing_advance = 500; // = 500 micro seconds, seems to be a good default value
pa_channel_map_init_mono(&u->mono_map);
pa_channel_map_init_stereo(&u->stereo_map);
u->hw_sample_spec.format = PA_SAMPLE_S16NE;
u->hw_sample_spec.rate = SAMPLE_RATE_HW_HZ;
u->hw_sample_spec.channels = 2;
u->hw_mono_sample_spec.format = PA_SAMPLE_S16NE;
u->hw_mono_sample_spec.rate = SAMPLE_RATE_HW_HZ;
u->hw_mono_sample_spec.channels = 1;
u->aep_sample_spec.format = PA_SAMPLE_S16NE;
u->aep_sample_spec.rate = SAMPLE_RATE_AEP_HZ;
u->aep_sample_spec.channels = 1;
pa_channel_map_init_mono(&u->aep_channel_map);
// The result is rounded down incorrectly thus +1
u->aep_fragment_size = pa_usec_to_bytes(PERIOD_AEP_USECS+1, &u->aep_sample_spec);
u->aep_hw_fragment_size = pa_usec_to_bytes(PERIOD_AEP_USECS+1, &u->hw_sample_spec);
//.........这里部分代码省略.........
开发者ID:community-ssu,项目名称:pulseaudio-nokia,代码行数:101,代码来源:module-nokia-voice.c
示例12: pa__init
int pa__init(pa_module*m) {
pa_modargs *ma = NULL;
struct userdata *u = NULL;
#if defined(USE_TCP_SOCKETS)
uint32_t port = IPV4_PORT;
pa_bool_t port_fallback = TRUE;
const char *listen_on;
#else
int r;
#endif
#if defined(USE_PROTOCOL_NATIVE) || defined(USE_PROTOCOL_HTTP)
char t[256];
#endif
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments");
goto fail;
}
m->userdata = u = pa_xnew0(struct userdata, 1);
u->module = m;
#if defined(USE_PROTOCOL_SIMPLE)
u->simple_protocol = pa_simple_protocol_get(m->core);
u->simple_options = pa_simple_options_new();
if (pa_simple_options_parse(u->simple_options, m->core, ma) < 0)
goto fail;
u->simple_options->module = m;
#elif defined(USE_PROTOCOL_CLI)
u->cli_protocol = pa_cli_protocol_get(m->core);
#elif defined(USE_PROTOCOL_HTTP)
u->http_protocol = pa_http_protocol_get(m->core);
#elif defined(USE_PROTOCOL_NATIVE)
u->native_protocol = pa_native_protocol_get(m->core);
u->native_options = pa_native_options_new();
if (pa_native_options_parse(u->native_options, m->core, ma) < 0)
goto fail;
u->native_options->module = m;
#else
u->esound_protocol = pa_esound_protocol_get(m->core);
u->esound_options = pa_esound_options_new();
if (pa_esound_options_parse(u->esound_options, m->core, ma) < 0)
goto fail;
u->esound_options->module = m;
#endif
#if defined(USE_TCP_SOCKETS)
if (pa_in_system_mode() || pa_modargs_get_value(ma, "port", NULL))
port_fallback = FALSE;
if (pa_modargs_get_value_u32(ma, "port", &port) < 0 || port < 1 || port > 0xFFFF) {
pa_log("port= expects a numerical argument between 1 and 65535.");
goto fail;
}
listen_on = pa_modargs_get_value(ma, "listen", NULL);
if (listen_on) {
# ifdef HAVE_IPV6
u->socket_server_ipv6 = pa_socket_server_new_ipv6_string(m->core->mainloop, listen_on, (uint16_t) port, port_fallback, TCPWRAP_SERVICE);
# endif
u->socket_server_ipv4 = pa_socket_server_new_ipv4_string(m->core->mainloop, listen_on, (uint16_t) port, port_fallback, TCPWRAP_SERVICE);
} else {
# ifdef HAVE_IPV6
u->socket_server_ipv6 = pa_socket_server_new_ipv6_any(m->core->mainloop, (uint16_t) port, port_fallback, TCPWRAP_SERVICE);
# endif
u->socket_server_ipv4 = pa_socket_server_new_ipv4_any(m->core->mainloop, (uint16_t) port, port_fallback, TCPWRAP_SERVICE);
}
# ifdef HAVE_IPV6
if (!u->socket_server_ipv4 && !u->socket_server_ipv6)
# else
if (!u->socket_server_ipv4)
# endif
goto fail;
if (u->socket_server_ipv4)
pa_socket_server_set_callback(u->socket_server_ipv4, socket_server_on_connection_cb, u);
# ifdef HAVE_IPV6
if (u->socket_server_ipv6)
pa_socket_server_set_callback(u->socket_server_ipv6, socket_server_on_connection_cb, u);
# endif
#else
# if defined(USE_PROTOCOL_ESOUND)
# if defined(USE_PER_USER_ESOUND_SOCKET)
u->socket_path = pa_sprintf_malloc("/tmp/.esd-%lu/socket", (unsigned long) getuid());
# else
u->socket_path = pa_xstrdup("/tmp/.esd/socket");
# endif
//.........这里部分代码省略.........
开发者ID:BYSTROSTREL,项目名称:pulseaudio,代码行数:101,代码来源:module-protocol-stub.c
示例13: pa__init
int pa__init(pa_module*m) {
struct userdata *u;
pa_modargs *ma = NULL;
const char *dst_addr;
const char *src_addr;
uint32_t port = DEFAULT_PORT, mtu;
uint32_t ttl = DEFAULT_TTL;
sa_family_t af;
int fd = -1, sap_fd = -1;
pa_source *s;
pa_sample_spec ss;
pa_channel_map cm;
struct sockaddr_in dst_sa4, dst_sap_sa4, src_sa4, src_sap_sa4;
#ifdef HAVE_IPV6
struct sockaddr_in6 dst_sa6, dst_sap_sa6, src_sa6, src_sap_sa6;
#endif
struct sockaddr_storage sa_dst;
pa_source_output *o = NULL;
uint8_t payload;
char *p;
int r, j;
socklen_t k;
char hn[128], *n;
bool loop = false;
enum inhibit_auto_suspend inhibit_auto_suspend = INHIBIT_AUTO_SUSPEND_ONLY_WITH_NON_MONITOR_SOURCES;
const char *inhibit_auto_suspend_str;
pa_source_output_new_data data;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments");
goto fail;
}
if (!(s = pa_namereg_get(m->core, pa_modargs_get_value(ma, "source", NULL), PA_NAMEREG_SOURCE))) {
pa_log("Source does not exist.");
goto fail;
}
if (pa_modargs_get_value_boolean(ma, "loop", &loop) < 0) {
pa_log("Failed to parse \"loop\" parameter.");
goto fail;
}
if ((inhibit_auto_suspend_str = pa_modargs_get_value(ma, "inhibit_auto_suspend", NULL))) {
if (pa_streq(inhibit_auto_suspend_str, "always"))
inhibit_auto_suspend = INHIBIT_AUTO_SUSPEND_ALWAYS;
else if (pa_streq(inhibit_auto_suspend_str, "never"))
inhibit_auto_suspend = INHIBIT_AUTO_SUSPEND_NEVER;
else if (pa_streq(inhibit_auto_suspend_str, "only_with_non_monitor_sources"))
inhibit_auto_suspend = INHIBIT_AUTO_SUSPEND_ONLY_WITH_NON_MONITOR_SOURCES;
else {
pa_log("Failed to parse the \"inhibit_auto_suspend\" parameter.");
goto fail;
}
}
ss = s->sample_spec;
pa_rtp_sample_spec_fixup(&ss);
cm = s->channel_map;
if (pa_modargs_get_sample_spec(ma, &ss) < 0) {
pa_log("Failed to parse sample specification");
goto fail;
}
if (!pa_rtp_sample_spec_valid(&ss)) {
pa_log("Specified sample type not compatible with RTP");
goto fail;
}
if (ss.channels != cm.channels)
pa_channel_map_init_auto(&cm, ss.channels, PA_CHANNEL_MAP_AIFF);
payload = pa_rtp_payload_from_sample_spec(&ss);
mtu = (uint32_t) pa_frame_align(DEFAULT_MTU, &ss);
if (pa_modargs_get_value_u32(ma, "mtu", &mtu) < 0 || mtu < 1 || mtu % pa_frame_size(&ss) != 0) {
pa_log("Invalid MTU.");
goto fail;
}
port = DEFAULT_PORT + ((uint32_t) (rand() % 512) << 1);
if (pa_modargs_get_value_u32(ma, "port", &port) < 0 || port < 1 || port > 0xFFFF) {
pa_log("port= expects a numerical argument between 1 and 65535.");
goto fail;
}
if (port & 1)
pa_log_warn("Port number not even as suggested in RFC3550!");
if (pa_modargs_get_value_u32(ma, "ttl", &ttl) < 0 || ttl < 1 || ttl > 0xFF) {
pa_log("ttl= expects a numerical argument between 1 and 255.");
goto fail;
}
src_addr = pa_modargs_get_value(ma, "source_ip", DEFAULT_SOURCE_IP);
if (inet_pton(AF_INET, src_addr, &src_sa4.sin_addr) > 0) {
//.........这里部分代码省略.........
开发者ID:jprvita,项目名称:pulseaudio,代码行数:101,代码来源:module-rtp-send.c
示例14: pa__init
int pa__init(pa_module *m) {
struct userdata *u = NULL;
pa_modargs *ma = NULL;
pa_sink_new_data sink_data;
pa_sample_spec ss;
pa_channel_map map;
const char *remote_server = NULL;
const char *sink_name = NULL;
const char *compression = NULL;
char *default_sink_name = NULL;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments.");
goto fail;
}
ss = m->core->default_sample_spec;
map = m->core->default_channel_map;
if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
pa_log("Invalid sample format specification or channel map");
goto fail;
}
remote_server = pa_modargs_get_value(ma, "server", NULL);
if (!remote_server) {
pa_log("No server given!");
goto fail;
}
u = pa_xnew0(struct userdata, 1);
u->module = m;
m->userdata = u;
u->remote_server = pa_xstrdup(remote_server);
u->thread_mainloop = pa_mainloop_new();
if (u->thread_mainloop == NULL) {
pa_log("Failed to create mainloop");
goto fail;
}
u->thread_mainloop_api = pa_mainloop_get_api(u->thread_mainloop);
u->cookie_file = pa_xstrdup(pa_modargs_get_value(ma, "cookie", NULL));
u->remote_sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
u->thread_mq = pa_xnew0(pa_thread_mq, 1);
pa_thread_mq_init_thread_mainloop(u->thread_mq, m->core->mainloop, u->thread_mainloop_api);
/* Create sink */
pa_sink_new_data_init(&sink_data);
sink_data.driver = __FILE__;
sink_data.module = m;
default_sink_name = pa_sprintf_malloc("tunnel-sink-new.%s", remote_server);
sink_name = pa_modargs_get_value(ma, "sink_name", default_sink_name);
compression = pa_modargs_get_value(ma, "compression", NULL);
if (compression) {
pa_log("compression activated");
memset(&u->transcode, 0, sizeof(pa_transcode));
if(strcmp(compression, "opus") == 0 && pa_transcode_supported(PA_ENCODING_OPUS)){
compression = pa_modargs_get_value(ma, "compression-frame_size", NULL);
if(compression) u->transcode.frame_size = atoi(compression);
compression = pa_modargs_get_value(ma, "compression-bitrate", NULL);
if(compression) u->transcode.bitrate = atoi(compression);
pa_transcode_init(&u->transcode, PA_ENCODING_OPUS, PA_TRANSCODE_ENCODER, NULL, &ss);
}
}
else u->transcode.encoding = -1;
pa_sink_new_data_set_name(&sink_data, sink_name);
pa_sink_new_data_set_sample_spec(&sink_data, &ss);
pa_sink_new_data_set_channel_map(&sink_data, &map);
pa_proplist_sets(sink_data.proplist, PA_PROP_DEVICE_CLASS, "sound");
pa_proplist_setf(sink_data.proplist,
PA_PROP_DEVICE_DESCRIPTION,
_("Tunnel to %s/%s"),
remote_server,
pa_strempty(u->remote_sink_name));
if (pa_modargs_get_proplist(ma, "sink_properties", sink_data.proplist, PA_UPDATE_REPLACE) < 0) {
pa_log("Invalid properties");
pa_sink_new_data_done(&sink_data);
goto fail;
}
if (!(u->sink = pa_sink_new(m->core, &sink_data, PA_SINK_LATENCY | PA_SINK_DYNAMIC_LATENCY | PA_SINK_NETWORK))) {
pa_log("Failed to create sink.");
pa_sink_new_data_done(&sink_data);
goto fail;
}
pa_sink_new_data_done(&sink_data);
u->sink->userdata = u;
u->sink->parent.process_msg = sink_process_msg_cb;
u->sink->update_requested_latency = sink_update_requested_latency_cb;
pa_sink_set_latency_range(u->sink, 0, MAX_LATENCY_USEC);
//.........这里部分代码省略.........
开发者ID:indrwthaachen,项目名称:pulseaudio,代码行数:101,代码来源:module-tunnel-sink-new.c
示例15: pa__init
int pa__init(pa_module *m) {
struct userdata *u = NULL;
pa_modargs *ma;
struct udev_enumerate *enumerate = NULL;
struct udev_list_entry *item = NULL, *first = NULL;
int fd;
bool use_tsched = true, fixed_latency_range = false, ignore_dB = false, deferred_volume = m->core->deferred_volume;
bool use_ucm = true;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments");
goto fail;
}
m->userdata = u = pa_xnew0(struct userdata, 1);
u->core = m->core;
u->devices = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, (pa_free_cb_t) device_free);
u->inotify_fd = -1;
if (pa_modargs_get_value_boolean(ma, "tsched", &use_tsched) < 0) {
pa_log("Failed to parse tsched= argument.");
goto fail;
}
u->use_tsched = use_tsched;
if (pa_modargs_get_value(ma, "tsched_buffer_size", NULL)) {
if (pa_modargs_get_value_u32(ma, "tsched_buffer_size", &u->tsched_buffer_size) < 0) {
pa_log("Failed to parse tsched_buffer_size= argument.");
goto fail;
}
u->tsched_buffer_size_valid = true;
}
if (pa_modargs_get_value_boolean(ma, "fixed_latency_range", &fixed_latency_range) < 0) {
pa_log("Failed to parse fixed_latency_range= argument.");
goto fail;
}
u->fixed_latency_range = fixed_latency_range;
if (pa_modargs_get_value_boolean(ma, "ignore_dB", &ignore_dB) < 0) {
pa_log("Failed to parse ignore_dB= argument.");
goto fail;
}
u->ignore_dB = ignore_dB;
if (pa_modargs_get_value_boolean(ma, "deferred_volume", &deferred_volume) < 0) {
pa_log("Failed to parse deferred_volume= argument.");
goto fail;
}
u->deferred_volume = deferred_volume;
if (pa_modargs_get_value_boolean(ma, "use_ucm", &use_ucm) < 0) {
pa_log("Failed to parse use_ucm= argument.");
goto fail;
}
u->use_ucm = use_ucm;
if (!(u->udev = udev_new())) {
pa_log("Failed to initialize udev library.");
goto fail;
}
if (setup_inotify(u) < 0)
goto fail;
if (!(u->monitor = udev_monitor_new_from_netlink(u->udev, "udev"))) {
pa_log("Failed to initialize monitor.");
goto fail;
}
if (udev_monitor_filter_add_match_subsystem_devtype(u->monitor, "sound", NULL) < 0) {
pa_log("Failed to subscribe to sound devices.");
goto fail;
}
errno = 0;
if (udev_monitor_enable_receiving(u->monitor) < 0) {
pa_log("Failed to enable monitor: %s", pa_cstrerror(errno));
if (errno == EPERM)
pa_log_info("Most likely your kernel is simply too old and "
"allows only privileged processes to listen to device events. "
"Please upgrade your kernel to at least 2.6.30.");
goto fail;
}
if ((fd = udev_monitor_get_fd(u->monitor)) < 0) {
pa_log("Failed to get udev monitor fd.");
goto fail;
}
pa_assert_se(u->udev_io = u->core->mainloop->io_new(u->core->mainloop, fd, PA_IO_EVENT_INPUT, monitor_cb, u));
if (!(enumerate = udev_enumerate_new(u->udev))) {
pa_log("Failed to initialize udev enumerator.");
goto fail;
}
//.........这里部分代码省略.........
开发者ID:DryakhlyyZlodey,项目名称:pulseaudio,代码行数:101,代码来源:module-udev-detect.c
示例16: pa__init
int pa__init(pa_module* m)
{
pa_assert(m);
/* this example uses fixed sample spec and channel map
*
* however, usually we to the following instead:
* - set sample spec and chennel map to default values:
* m->core->default_sample_spec
* m->core->default_channel_map
*
* - overwrite them with pa_modargs_get_sample_spec_and_channel_map()
* if module was loaded with corresponding arguments
*
* - finally adjust values to nearest supported form
*/
pa_sample_spec sample_spec;
sample_spec.format = PA_SAMPLE_FLOAT32LE;
sample_spec.rate = 44100;
sample_spec.channels = 2;
pa_channel_map channel_map;
pa_channel_map_init_stereo(&channel_map);
/* get module arguments (key-value list passed to load-module) */
pa_modargs *args;
if (!(args = pa_modargs_new(m->argument, example_sink_modargs))) {
pa_log("[example sink] failed to parse module arguments");
goto error;
}
/* create and initialize module-specific data */
struct example_sink_userdata *u = pa_xnew0(struct example_sink_userdata, 1);
pa_assert(u);
m->userdata = u;
u->module = m;
u->rtpoll = pa_rtpoll_new();
pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
u->output_file = pa_modargs_get_value(args, "output_file", "/dev/null");
u->output_fd = open(u->output_file, O_WRONLY | O_CREAT | O_TRUNC);
if (u->output_fd == -1) {
pa_log("[example sink] can't open output file %s", u->output_file);
goto error;
}
/* create and initialize sink */
pa_sink_new_data data;
pa_sink_new_data_init(&data);
data.driver = "example_sink";
data.module = m;
pa_sink_new_data_set_name(
&data,
pa_modargs_get_value(args, "sink_name", "example_sink"));
pa_sink_new_data_set_sample_spec(&data, &sample_spec);
pa_sink_new_data_set_channel_map(&data, &channel_map);
if (pa_modargs_get_proplist(
args,
"sink_properties",
data.proplist,
PA_UPDATE_REPLACE) < 0) {
pa_log("[example sink] invalid sink properties");
pa_sink_new_data_done(&data);
goto error;
}
u->sink = pa_sink_new(m->core, &data, PA_SINK_LATENCY);
pa_sink_new_data_done(&data);
if (!u->sink) {
pa_log("[example sink] failed to create sink");
goto error;
}
/* setup sink callbacks */
u->sink->parent.process_msg = process_message;
u->sink->userdata = u;
/* setup sink event loop */
pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
pa_sink_set_rtpoll(u->sink, u->rtpoll);
/* start thread for sink event loop and sample reader */
if (!(u->thread = pa_thread_new("example_sink", thread_loop, u))) {
pa_log("[example sink] failed to create thread");
goto error;
}
pa_sink_put(u->sink);
pa_modargs_free(args);
return 0;
error:
if (args) {
pa_modargs_free(args);
}
pa__done(m);
//.........这里部分代码省略.........
开发者ID:gavv,项目名称:snippets,代码行数:101,代码来源:pa_module_sink.c
示例17: pa__init
int pa__init(pa_module*m) {
struct userdata *u;
pa_sample_spec ss;
pa_channel_map source_map, stream_map;
pa_modargs *ma;
pa_source *master;
pa_source_output_new_data source_output_data;
pa_source_new_data source_data;
bool remix = true;
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_log("Failed to parse module arguments.");
goto fail;
}
if (!(master = pa_namereg_get(m->core, pa_modargs_get_value(ma, "master", NULL), PA_NAMEREG_SOURCE))) {
pa_log("Master source not found.");
goto fail;
}
ss = master->sample_spec;
source_map = master->channel_map;
if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &source_map, PA_CHANNEL_MAP_DEFAULT) < 0) {
pa_log("Invalid sample format specification or channel map.");
goto fail;
}
stream_map = source_map;
if (pa_modargs_get_channel_map(ma, "master_channel_map", &stream_map) < 0) {
pa_log("Invalid master channel map.");
goto fail;
}
if (stream_map.channels != ss.channels) {
pa_log("Number of channels doesn't match.");
goto fail;
}
if (pa_channel_map_equal(&stream_map, &master->channel_map))
pa_log_warn("No remapping configured, proceeding nonetheless!");
if (pa_modargs_get_value_boolean(ma, "remix", &remix) < 0) {
pa_log("Invalid boolean remix parameter.");
goto fail;
}
u = pa_xnew0(struct userdata, 1);
u->module = m;
m->userdata = u;
/* Create source */
pa_source_new_data_init(&source_data);
source_data.driver = __FILE__;
source_data.module = m;
if (!(source_data.name = pa_xstrdup(pa_modargs_get_value(ma, "source_name", NULL))))
source_data.name = pa_sprintf_malloc("%s.remapped", master->name);
pa_source_new_data_set_sample_spec(&source_data, &ss);
pa_source_new_data_set_channel_map(&source_data, &source_map);
pa_proplist_sets(source_data.proplist, PA_PROP_DEVICE_MASTER_DEVICE, master->name);
pa_proplist_sets(source_data.proplist, PA_PROP_DEVICE_CLASS, "filter");
if (pa_modargs_get_proplist(ma, "source_properties", source_data.proplist, PA_UPDATE_REPLACE) < 0) {
pa_log("Invalid properties.");
pa_source_new_data_done(&source_data);
goto fail;
}
|
请发表评论