X-Git-Url: https://git.ao2.it/gst-aseq-appsrc.git/blobdiff_plain/235f2de4cffc16ca76b445175aac26f251d7c0f1..2dcd337c4aad9ce7a8a0b06e9243b3adb05ecb95:/gst-aseq-appsrc.c diff --git a/gst-aseq-appsrc.c b/gst-aseq-appsrc.c index 8b939e9..4988dc2 100644 --- a/gst-aseq-appsrc.c +++ b/gst-aseq-appsrc.c @@ -171,12 +171,11 @@ connect_ports (App * app) static void push_buffer (App * app, gpointer data, guint size) { - GstBuffer *buffer; GstClockTime time; - int ret; gpointer local_data; + GstBuffer *buffer; + int ret; - /* read the next chunk */ buffer = gst_buffer_new (); time = app->tick * DEFAULT_TICK_PERIOD_MS * GST_MSECOND; @@ -192,6 +191,8 @@ push_buffer (App * app, gpointer data, guint size) gst_memory_new_wrapped (0, local_data, size, 0, size, local_data, g_free)); + GST_MEMDUMP ("MIDI data:", local_data, size); + GST_DEBUG ("feed buffer %p, tick %" G_GUINT64_FORMAT " size: %u", (gpointer) buffer, app->tick, size); g_signal_emit_by_name (app->appsrc, "push-buffer", buffer, &ret); @@ -221,14 +222,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, @@ -241,6 +246,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 {