Handle more errors from GStreamer.
authorMichael Goddard <michael.goddard@nokia.com>
Thu, 15 Mar 2012 05:41:19 +0000 (15:41 +1000)
committerQt by Nokia <qt-info@nokia.com>
Fri, 16 Mar 2012 03:32:50 +0000 (04:32 +0100)
Corrupted etc files can throw GST_STREAM_ERROR_DECODE and those should
generally stop playback.  So now any error is fatal, not just the
recognised ones.

Change-Id: I7b6dd2a460d94f70c459a313a9d4dc84028f8002
Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
src/plugins/gstreamer/audiodecoder/qgstreameraudiodecodersession.cpp
src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp

index 8815819efa9bf74bf2cd2c593699f6c1a9214674..e1898451926c0ed23e36d350ccb6420e9aeca326 100644 (file)
@@ -262,13 +262,12 @@ bool QGstreamerAudioDecoderSession::processBusMessage(const QGstreamerMessage &m
             GError *err;
             gchar *debug;
             gst_message_parse_error(gm, &err, &debug);
-            // If the source has given up, so do we.
-            if (qstrcmp(GST_OBJECT_NAME(GST_MESSAGE_SRC(gm)), "source") == 0) {
-                processInvalidMedia(QAudioDecoder::ResourceError, QString::fromUtf8(err->message));
-            } else if (err->domain == GST_STREAM_ERROR
+            QAudioDecoder::Error qerror = QAudioDecoder::ResourceError;
+            if (err->domain == GST_STREAM_ERROR
                        && (err->code == GST_STREAM_ERROR_DECRYPT || err->code == GST_STREAM_ERROR_DECRYPT_NOKEY)) {
-                processInvalidMedia(QAudioDecoder::AccessDeniedError, QString::fromUtf8(err->message));
+                qerror = QAudioDecoder::AccessDeniedError;
             }
+            processInvalidMedia(qerror, QString::fromUtf8(err->message));
             g_error_free(err);
             g_free(debug);
         }
index 708465d269d04dd737ac43a27fe15e5783ff317c..44ca797760811e1b5b7d72e7071220eae3804238 100644 (file)
@@ -1206,13 +1206,14 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message
                 GError *err;
                 gchar *debug;
                 gst_message_parse_error(gm, &err, &debug);
-                if (qstrncmp(GST_OBJECT_NAME(GST_MESSAGE_SRC(gm)), "decodebin2", 10) == 0
-                    || qstrncmp(GST_OBJECT_NAME(GST_MESSAGE_SRC(gm)), "uridecodebin", 12) == 0) {
-                    processInvalidMedia(QMediaPlayer::ResourceError, QString::fromUtf8(err->message));
-                } else if (err->domain == GST_STREAM_ERROR
-                           && (err->code == GST_STREAM_ERROR_DECRYPT || err->code == GST_STREAM_ERROR_DECRYPT_NOKEY)) {
-                    processInvalidMedia(QMediaPlayer::AccessDeniedError, QString::fromUtf8(err->message));
+                // Nearly all errors map to ResourceError
+                QMediaPlayer::Error qerror = QMediaPlayer::ResourceError;
+                if (err->domain == GST_STREAM_ERROR
+                           && (err->code == GST_STREAM_ERROR_DECRYPT
+                               || err->code == GST_STREAM_ERROR_DECRYPT_NOKEY)) {
+                    qerror = QMediaPlayer::AccessDeniedError;
                 }
+                processInvalidMedia(qerror, QString::fromUtf8(err->message));
                 qWarning() << "Error:" << QString::fromUtf8(err->message);
                 g_error_free(err);
                 g_free(debug);