gchar * gst_pulse_client_name (void) { gchar buf[PATH_MAX]; const char *c; if ((c = g_get_application_name ())) return g_strdup (c); else if (pa_get_binary_name (buf, sizeof (buf))) return g_strdup (buf); else return g_strdup_printf ("GStreamer-pid-%lu", (gulong) getpid ()); }
gchar * gst_pulse_client_name (void) { gchar buf[PATH_MAX]; const char *c; if ((c = g_get_application_name ())) return g_strdup (c); else if (pa_get_binary_name (buf, sizeof (buf))) return g_strdup (buf); else return g_strdup ("GStreamer"); }
static void init_defaults(void) { const char *e; if (!ident) { char binary[256]; if (pa_get_binary_name(binary, sizeof(binary))) pa_log_set_ident(binary); } if (getenv(ENV_LOG_SYSLOG)) { target_override = PA_LOG_SYSLOG; target_override_set = TRUE; } if ((e = getenv(ENV_LOG_LEVEL))) { maximum_level_override = (pa_log_level_t) atoi(e); if (maximum_level_override >= PA_LOG_LEVEL_MAX) maximum_level_override = PA_LOG_LEVEL_MAX-1; } if (getenv(ENV_LOG_COLORS)) flags_override |= PA_LOG_COLORS; if (getenv(ENV_LOG_PRINT_TIME)) flags_override |= PA_LOG_PRINT_TIME; if (getenv(ENV_LOG_PRINT_FILE)) flags_override |= PA_LOG_PRINT_FILE; if (getenv(ENV_LOG_PRINT_META)) flags_override |= PA_LOG_PRINT_META; if (getenv(ENV_LOG_PRINT_LEVEL)) flags_override |= PA_LOG_PRINT_LEVEL; if ((e = getenv(ENV_LOG_BACKTRACE))) { show_backtrace_override = (unsigned) atoi(e); if (show_backtrace_override <= 0) show_backtrace_override = 0; } if ((e = getenv(ENV_LOG_BACKTRACE_SKIP))) { skip_backtrace = (unsigned) atoi(e); if (skip_backtrace <= 0) skip_backtrace = 0; } }
static pa_context *connect_context(pa_threaded_mainloop *loop, ALboolean silent) { const char *name = "OpenAL Soft"; char path_name[PATH_MAX]; pa_context_state_t state; pa_context *context; int err; if(pa_get_binary_name(path_name, sizeof(path_name))) name = pa_path_get_filename(path_name); context = pa_context_new(pa_threaded_mainloop_get_api(loop), name); if(!context) { ERR("pa_context_new() failed\n"); return NULL; } pa_context_set_state_callback(context, context_state_callback, loop); if((err=pa_context_connect(context, NULL, pulse_ctx_flags, NULL)) >= 0) { while((state=pa_context_get_state(context)) != PA_CONTEXT_READY) { if(!PA_CONTEXT_IS_GOOD(state)) { err = pa_context_errno(context); if(err > 0) err = -err; break; } pa_threaded_mainloop_wait(loop); } } pa_context_set_state_callback(context, NULL, NULL); if(err < 0) { if(!silent) ERR("Context did not connect: %s\n", pa_strerror(err)); pa_context_unref(context); return NULL; } return context; }
int ao_plugin_test(void) { char *p=NULL, t[256], t2[256]; const char *fn; struct pa_simple *s; static const struct pa_sample_spec ss = { .format = PA_SAMPLE_S16NE, .rate = 44100, .channels = 2 }; size_t allocated = 128; disable_sigpipe(); if (getenv("PULSE_SERVER") || getenv("PULSE_SINK")) return 1; while (1) { p = pa_xmalloc(allocated); if (!(fn = pa_get_binary_name(p, allocated))) { break; } if (fn != p || strlen(p) < allocated - 1) { snprintf(t, sizeof(t), "libao[%s]", fn); snprintf(t2, sizeof(t2), "libao[%s] test", fn); break; } pa_xfree(p); allocated *= 2; } pa_xfree(p); p = NULL; if (!(s = pa_simple_new(NULL, fn ? t : "libao", PA_STREAM_PLAYBACK, NULL, fn ? t2 : "libao test", &ss, NULL, NULL, NULL))) return 0; pa_simple_free(s); return 1; } ao_info *ao_plugin_driver_info(void) { return &ao_pulse_info; } int ao_plugin_device_init(ao_device *device) { ao_pulse_internal *internal; assert(device); internal = (ao_pulse_internal *) malloc(sizeof(ao_pulse_internal)); if (internal == NULL) return 0; internal->simple = NULL; internal->server = NULL; internal->sink = NULL; internal->client_name = NULL; internal->buffer_time = AO_PULSE_BUFFER_TIME; device->internal = internal; device->output_matrix_order = AO_OUTPUT_MATRIX_PERMUTABLE; device->output_matrix = strdup("M,L,R,C,BC,BL,BR,LFE,CL,CR,SL,SR," "A0,A1,A2,A3,A4,A5,A6,A7,A8,A9," "A10,A11,A12,A13,A14,A15,A16,A17,A18,A19," "A20,A21,A22,A23,A24,A25,A26,A27,A28,A29," "A30,A31"); return 1; }
int ao_plugin_open(ao_device *device, ao_sample_format *format) { char *p=NULL, t[256], t2[256]; const char *fn = NULL; ao_pulse_internal *internal; struct pa_sample_spec ss; struct pa_channel_map map; struct pa_buffer_attr battr; size_t allocated = 128; assert(device && device->internal && format); internal = (ao_pulse_internal *) device->internal; if (format->bits == 8) ss.format = PA_SAMPLE_U8; else if (format->bits == 16) ss.format = PA_SAMPLE_S16NE; #ifdef PA_SAMPLE_S24NE else if (format->bits == 24) ss.format = PA_SAMPLE_S24NE; #endif else return 0; if (device->output_channels <= 0 || device->output_channels > PA_CHANNELS_MAX) return 0; ss.channels = device->output_channels; ss.rate = format->rate; disable_sigpipe(); if (internal->client_name) { snprintf(t, sizeof(t), "libao[%s]", internal->client_name); snprintf(t2, sizeof(t2), "libao[%s] playback stream", internal->client_name); } else { while (1) { p = pa_xmalloc(allocated); if (!(fn = pa_get_binary_name(p, allocated))) { break; } if (fn != p || strlen(p) < allocated - 1) { fn = pa_path_get_filename(fn); snprintf(t, sizeof(t), "libao[%s]", fn); snprintf(t2, sizeof(t2), "libao[%s] playback stream", fn); break; } pa_xfree(p); allocated *= 2; } pa_xfree(p); p = NULL; if (!fn) { strcpy(t, "libao"); strcpy(t2, "libao playback stream"); } } if(device->input_map){ int i; pa_channel_map_init(&map); map.channels=device->output_channels; for(i=0;i<device->output_channels;i++){ if(device->input_map[i]==-1){ map.map[i] = PA_CHANNEL_POSITION_INVALID; }else{ map.map[i] = device->input_map[i]; } } } /* buffering attributes */ battr.prebuf = battr.minreq = battr.fragsize = -1; battr.tlength = (int)(internal->buffer_time * format->rate) / 1000000 * ((format->bits+7)/8) + device->output_channels; battr.minreq = battr.tlength/4; battr.maxlength = battr.tlength+battr.minreq; internal->simple = pa_simple_new(internal->server, t, PA_STREAM_PLAYBACK, internal->sink, t2, &ss, (device->input_map ? &map : NULL), &battr, NULL); if (!internal->simple) return 0; device->driver_byte_format = AO_FMT_NATIVE; internal->static_delay = pa_simple_get_latency(internal->simple, NULL); if(internal->static_delay<0) internal->static_delay = 0; return 1; }