From 6e878031144ace9255998d9b70be47081c9e4915 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 18 May 2012 09:52:09 +0200 Subject: [PATCH] launch: improve EOS on shutdown handling When the -e option is selected, also wait for EOS when the pipeline produced an error. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=630997 --- tools/gst-launch.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/tools/gst-launch.c b/tools/gst-launch.c index d0aa879..27f9b58 100644 --- a/tools/gst-launch.c +++ b/tools/gst-launch.c @@ -1099,18 +1099,37 @@ main (int argc, char *argv[]) tfthen = gst_util_get_timestamp (); caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING); - if (eos_on_shutdown && caught_error == ELR_INTERRUPT) { - PRINT (_("EOS on shutdown enabled -- Forcing EOS on the pipeline\n")); + if (eos_on_shutdown && caught_error != ELR_NO_ERROR) { + gboolean ignore_errors; + waiting_eos = TRUE; - gst_element_send_event (pipeline, gst_event_new_eos ()); + if (caught_error == ELR_INTERRUPT) { + PRINT (_("EOS on shutdown enabled -- Forcing EOS on the pipeline\n")); + gst_element_send_event (pipeline, gst_event_new_eos ()); + ignore_errors = FALSE; + } else { + PRINT (_("EOS on shutdown enabled -- waiting for EOS after Error\n")); + ignore_errors = TRUE; + } PRINT (_("Waiting for EOS...\n")); - caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING); - if (caught_error == ELR_NO_ERROR) { - /* we got EOS */ - PRINT (_("EOS received - stopping pipeline...\n")); - } else if (caught_error == ELR_ERROR) { - PRINT (_("An error happened while waiting for EOS\n")); + while (TRUE) { + caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING); + + if (caught_error == ELR_NO_ERROR) { + /* we got EOS */ + PRINT (_("EOS received - stopping pipeline...\n")); + break; + } else if (caught_error == ELR_INTERRUPT) { + PRINT (_ + ("Interrupt while waiting for EOS - stopping pipeline...\n")); + break; + } else if (caught_error == ELR_ERROR) { + if (!ignore_errors) { + PRINT (_("An error happened while waiting for EOS\n")); + break; + } + } } } tfnow = gst_util_get_timestamp (); -- 2.7.4