From ad9d15c83896aa99d67ec25110be7d20c56709b1 Mon Sep 17 00:00:00 2001 From: fryshorts Date: Sun, 18 May 2014 14:31:37 +0200 Subject: [PATCH 1/3] Change logging statements for pulseaudio plugin This removes some useless and annoying logging and on the other hand bumps the prio on more important ones. --- plugins/linux-pulseaudio/pulse-input.c | 25 +++++++++++++----------- plugins/linux-pulseaudio/pulse-wrapper.c | 10 +--------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/plugins/linux-pulseaudio/pulse-input.c b/plugins/linux-pulseaudio/pulse-input.c index eaf6d900a..fe0e75d6a 100644 --- a/plugins/linux-pulseaudio/pulse-input.c +++ b/plugins/linux-pulseaudio/pulse-input.c @@ -112,16 +112,14 @@ static void pulse_stream_read(pa_stream *p, size_t nbytes, void *userdata) goto exit; if (!frames) { - blog(LOG_DEBUG, - "pulse-input: Got audio hole of %u bytes", + blog(LOG_ERROR, "pulse-input: Got audio hole of %u bytes", (unsigned int) bytes); pa_stream_drop(data->stream); goto exit; } if (pa_stream_get_time(data->stream, &pa_time) < 0) { - blog(LOG_ERROR, - "pulse-input: Failed to get timing info !"); + blog(LOG_ERROR, "pulse-input: Failed to get timing info !"); pa_stream_drop(data->stream); goto exit; } @@ -153,14 +151,19 @@ static void pulse_server_info(pa_context *c, const pa_server_info *i, UNUSED_PARAMETER(c); PULSE_DATA(userdata); + blog(LOG_INFO, "pulse-input: Server name: '%s %s'", + i->server_name, i->server_version); + data->format = i->sample_spec.format; data->samples_per_sec = i->sample_spec.rate; data->channels = i->sample_spec.channels; - blog(LOG_DEBUG, "pulse-input: Default format: %s, %u Hz, %u channels", + blog(LOG_INFO, "pulse-input: " + "Audio format: %s, %u Hz, %u channels with %s timestamps", pa_sample_format_to_string(i->sample_spec.format), i->sample_spec.rate, - i->sample_spec.channels); + i->sample_spec.channels, + (data->ostime) ? "OS" : "PA"); pulse_signal(0); } @@ -186,8 +189,6 @@ static int_fast32_t pulse_start_recording(struct pulse_data *data) } data->bytes_per_frame = pa_frame_size(&spec); - blog(LOG_DEBUG, "pulse-input: %u bytes per frame", - (unsigned int) data->bytes_per_frame); data->stream = pulse_stream_new(obs_source_getname(data->source), &spec, NULL); @@ -223,7 +224,8 @@ static int_fast32_t pulse_start_recording(struct pulse_data *data) return -1; } - blog(LOG_DEBUG, "pulse-input: Recording started"); + blog(LOG_INFO, "pulse-input: Started recording from '%s'", + data->device); return 0; } @@ -239,6 +241,9 @@ static void pulse_stop_recording(struct pulse_data *data) data->stream = NULL; pulse_unlock(); } + + blog(LOG_INFO, "pulse-input: Stopped recording from '%s'", + data->device); } /** @@ -396,8 +401,6 @@ static void pulse_destroy(void *vptr) if (data->device) bfree(data->device); bfree(data); - - blog(LOG_DEBUG, "pulse-input: Input destroyed"); } /** diff --git a/plugins/linux-pulseaudio/pulse-wrapper.c b/plugins/linux-pulseaudio/pulse-wrapper.c index 2f33709f7..991d1cb89 100644 --- a/plugins/linux-pulseaudio/pulse-wrapper.c +++ b/plugins/linux-pulseaudio/pulse-wrapper.c @@ -41,8 +41,6 @@ static void pulse_context_state_changed(pa_context *c, void *userdata) UNUSED_PARAMETER(userdata); UNUSED_PARAMETER(c); - blog(LOG_DEBUG, "pulse: context state changed"); - pulse_signal(0); } @@ -111,8 +109,6 @@ int_fast32_t pulse_init() } pulse_refs++; - blog(LOG_DEBUG, "pulse: Reference count increased to %"PRIuFAST32, - pulse_refs); pthread_mutex_unlock(&pulse_mutex); @@ -123,11 +119,7 @@ void pulse_unref() { pthread_mutex_lock(&pulse_mutex); - pulse_refs--; - blog(LOG_DEBUG, "pulse: Reference count decreased to %"PRIuFAST32, - pulse_refs); - - if (pulse_refs == 0) { + if (--pulse_refs == 0) { pulse_lock(); if (pulse_context != NULL) { pa_context_disconnect(pulse_context); From f3d9d248b6757ec2448759c7903663da9bb2c51f Mon Sep 17 00:00:00 2001 From: fryshorts Date: Mon, 19 May 2014 20:57:49 +0200 Subject: [PATCH 2/3] Fix a memory leak in pulseaudio plugin --- plugins/linux-pulseaudio/pulse-input.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/linux-pulseaudio/pulse-input.c b/plugins/linux-pulseaudio/pulse-input.c index fe0e75d6a..a15aa94a8 100644 --- a/plugins/linux-pulseaudio/pulse-input.c +++ b/plugins/linux-pulseaudio/pulse-input.c @@ -410,13 +410,13 @@ static void pulse_update(void *vptr, obs_data_t settings) { PULSE_DATA(vptr); bool restart = false; - char *new_device; + const char *new_device; - new_device = bstrdup(obs_data_getstring(settings, "device_id")); + new_device = obs_data_getstring(settings, "device_id"); if (!data->device || strcmp(data->device, new_device) != 0) { if (data->device) bfree(data->device); - data->device = new_device; + data->device = bstrdup(new_device); restart = true; } From ac4a054bdd2a299354b4d09260bf5471f26d57bd Mon Sep 17 00:00:00 2001 From: fryshorts Date: Mon, 19 May 2014 21:24:30 +0200 Subject: [PATCH 3/3] Add some statistics to pulseaudio plugin This patch adds counters for packets and frames for debugging purposes. --- plugins/linux-pulseaudio/pulse-input.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/plugins/linux-pulseaudio/pulse-input.c b/plugins/linux-pulseaudio/pulse-input.c index a15aa94a8..0590b9fee 100644 --- a/plugins/linux-pulseaudio/pulse-input.c +++ b/plugins/linux-pulseaudio/pulse-input.c @@ -25,18 +25,22 @@ along with this program. If not, see . struct pulse_data { obs_source_t source; + pa_stream *stream; + + /* user settings */ + bool ostime; char *device; + /* server info */ enum speaker_layout speakers; pa_sample_format_t format; uint_fast32_t samples_per_sec; + uint_fast32_t bytes_per_frame; uint_fast8_t channels; - uint_fast32_t bytes_per_frame; - - pa_stream *stream; - - bool ostime; + /* statistics */ + uint_fast32_t packets; + uint_fast64_t frames; }; static void pulse_stop_recording(struct pulse_data *data); @@ -136,8 +140,10 @@ static void pulse_stream_read(pa_stream *p, size_t nbytes, void *userdata) out.timestamp = pa_time - (pa_latency * 1000); obs_source_output_audio(data->source, &out); - pa_stream_drop(data->stream); + data->packets++; + data->frames += out.frames; + pa_stream_drop(data->stream); exit: pulse_signal(0); } @@ -244,6 +250,9 @@ static void pulse_stop_recording(struct pulse_data *data) blog(LOG_INFO, "pulse-input: Stopped recording from '%s'", data->device); + blog(LOG_INFO, "pulse-input: Got %"PRIuFAST32 + " packets with %"PRIuFAST64" frames", + data->packets, data->frames); } /**