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
This commit is contained in:
Wim Taymans 2012-05-18 09:52:09 +02:00
parent 0bdd1224d3
commit 6e87803114

View file

@ -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"));
waiting_eos = TRUE;
gst_element_send_event (pipeline, gst_event_new_eos ());
PRINT (_("Waiting for EOS...\n"));
caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING);
if (eos_on_shutdown && caught_error != ELR_NO_ERROR) {
gboolean ignore_errors;
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"));
waiting_eos = TRUE;
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"));
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 ();