X-Git-Url: https://git.ao2.it/gst-aseq-appsrc.git/blobdiff_plain/2c5b603490fb866797473a684a256da35ef456b1..2afa5b9c77d328add374a98e6b93452b5c2d4c4c:/gst-aseq-appsrc.c diff --git a/gst-aseq-appsrc.c b/gst-aseq-appsrc.c index 7c42ab4..506409e 100644 --- a/gst-aseq-appsrc.c +++ b/gst-aseq-appsrc.c @@ -75,6 +75,12 @@ init_seq (App * app) goto error; } + /* + * Prevent Valgrind from reporting cached configuration as memory leaks, see: + * http://git.alsa-project.org/?p=alsa-lib.git;a=blob;f=MEMORY-LEAK;hb=HEAD + */ + snd_config_update_free_global(); + ret = snd_seq_set_client_name (app->seq, DEFAULT_CLIENT_NAME); if (ret < 0) { GST_ERROR ("Cannot set client name - %s", snd_strerror (ret)); @@ -182,8 +188,6 @@ push_buffer (App * app, gpointer data, guint size) GST_BUFFER_DTS (buffer) = time; GST_BUFFER_PTS (buffer) = time; - GST_BUFFER_OFFSET (buffer) = time; - GST_BUFFER_DURATION (buffer) = DEFAULT_TICK_PERIOD_MS * GST_MSECOND; local_data = g_memdup (data, size); @@ -222,14 +226,18 @@ feed_data (GstElement * appsrc, guint size, App * app) ret = poll (app->pfds, app->npfds, DEFAULT_POLL_TIMEOUT_MS); if (ret < 0) { GST_ERROR ("ERROR in poll: %s", strerror (errno)); + gst_app_src_end_of_stream (GST_APP_SRC (appsrc)); } else if (ret == 0) { push_tick_buffer (app); } else { do { snd_seq_event_t *event; err = snd_seq_event_input (app->seq, &event); - if (err < 0) + if (err < 0 && err != -EAGAIN) { + GST_ERROR ("Error in snd_seq_event_input: %s", snd_strerror (err)); + gst_app_src_end_of_stream (GST_APP_SRC (appsrc)); break; + } if (event) { size_ev = snd_midi_event_decode (app->parser, app->buffer, DEFAULT_BUFSIZE, @@ -242,6 +250,7 @@ feed_data (GstElement * appsrc, guint size, App * app) } else { GST_ERROR ("Error decoding event from ALSA to output: %s", strerror (-size_ev)); + gst_app_src_end_of_stream (GST_APP_SRC (appsrc)); break; } } else {