From 02e9120ff664a66e95ea9269b5fe589bc88a3b1d Mon Sep 17 00:00:00 2001 From: mark Date: Wed, 15 Nov 2006 16:29:17 +0000 Subject: [PATCH] Implement error handler. Now we skip to the next track if an error occurs during playback. Fixes #1972 --- .../src/modules/playlistExecutor/src/GstreamerPlayer.cxx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/campcaster/src/modules/playlistExecutor/src/GstreamerPlayer.cxx b/campcaster/src/modules/playlistExecutor/src/GstreamerPlayer.cxx index db1572ffc..28ae95163 100644 --- a/campcaster/src/modules/playlistExecutor/src/GstreamerPlayer.cxx +++ b/campcaster/src/modules/playlistExecutor/src/GstreamerPlayer.cxx @@ -143,8 +143,11 @@ GstreamerPlayer :: errorHandler(GstElement * pipeline, gpointer self) throw () { - // TODO: handle error std::cerr << "gstreamer error: " << error->message << std::endl; + + // Important: We *must* use an idle function call here, so that the signal handler returns + // before fireOnStopEvent() is executed. + g_idle_add(fireOnStopEvent, self); } @@ -322,6 +325,7 @@ GstreamerPlayer :: open(const std::string fileUrl) if (isSmil) { debug() << "SMIL file detected." << endl; decoder = gst_element_factory_make("minimalaudiosmil", NULL); + if (!decoder) error() << "Unable to create minimalaudiosmil element." << endl; gst_element_link_many(filesrc, decoder, audioconvert, NULL); if (gst_element_get_parent(audiosink) == NULL) gst_bin_add(GST_BIN(pipeline), audiosink);