Handle more errors from GStreamer.
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>
This commit is contained in:
committed by
Qt by Nokia
parent
1f1bdbec82
commit
1a1ac6b884
@@ -262,13 +262,12 @@ bool QGstreamerAudioDecoderSession::processBusMessage(const QGstreamerMessage &m
|
|||||||
GError *err;
|
GError *err;
|
||||||
gchar *debug;
|
gchar *debug;
|
||||||
gst_message_parse_error(gm, &err, &debug);
|
gst_message_parse_error(gm, &err, &debug);
|
||||||
// If the source has given up, so do we.
|
QAudioDecoder::Error qerror = QAudioDecoder::ResourceError;
|
||||||
if (qstrcmp(GST_OBJECT_NAME(GST_MESSAGE_SRC(gm)), "source") == 0) {
|
if (err->domain == GST_STREAM_ERROR
|
||||||
processInvalidMedia(QAudioDecoder::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)) {
|
&& (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_error_free(err);
|
||||||
g_free(debug);
|
g_free(debug);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1206,13 +1206,14 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message
|
|||||||
GError *err;
|
GError *err;
|
||||||
gchar *debug;
|
gchar *debug;
|
||||||
gst_message_parse_error(gm, &err, &debug);
|
gst_message_parse_error(gm, &err, &debug);
|
||||||
if (qstrncmp(GST_OBJECT_NAME(GST_MESSAGE_SRC(gm)), "decodebin2", 10) == 0
|
// Nearly all errors map to ResourceError
|
||||||
|| qstrncmp(GST_OBJECT_NAME(GST_MESSAGE_SRC(gm)), "uridecodebin", 12) == 0) {
|
QMediaPlayer::Error qerror = QMediaPlayer::ResourceError;
|
||||||
processInvalidMedia(QMediaPlayer::ResourceError, QString::fromUtf8(err->message));
|
if (err->domain == GST_STREAM_ERROR
|
||||||
} else if (err->domain == GST_STREAM_ERROR
|
&& (err->code == GST_STREAM_ERROR_DECRYPT
|
||||||
&& (err->code == GST_STREAM_ERROR_DECRYPT || err->code == GST_STREAM_ERROR_DECRYPT_NOKEY)) {
|
|| err->code == GST_STREAM_ERROR_DECRYPT_NOKEY)) {
|
||||||
processInvalidMedia(QMediaPlayer::AccessDeniedError, QString::fromUtf8(err->message));
|
qerror = QMediaPlayer::AccessDeniedError;
|
||||||
}
|
}
|
||||||
|
processInvalidMedia(qerror, QString::fromUtf8(err->message));
|
||||||
qWarning() << "Error:" << QString::fromUtf8(err->message);
|
qWarning() << "Error:" << QString::fromUtf8(err->message);
|
||||||
g_error_free(err);
|
g_error_free(err);
|
||||||
g_free(debug);
|
g_free(debug);
|
||||||
|
|||||||
Reference in New Issue
Block a user