From 99c8af32b182834d234e28fa6a9fbabaa1983296 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Sun, 16 May 2021 21:26:28 +0200 Subject: Fix crashes on Linux Check for videosink and QPlatformMediaFormatInfo in QMediaFormat. Change-Id: I9603dae66fc4eb6a4433f43d2464e9f97916235f Reviewed-by: Volker Hilsheimer --- src/multimedia/qmediaformat.cpp | 17 ++++++++++++++--- src/multimedia/video/qvideosink.cpp | 8 +++++--- 2 files changed, 19 insertions(+), 6 deletions(-) (limited to 'src/multimedia') diff --git a/src/multimedia/qmediaformat.cpp b/src/multimedia/qmediaformat.cpp index ccf926026..72b9a5118 100644 --- a/src/multimedia/qmediaformat.cpp +++ b/src/multimedia/qmediaformat.cpp @@ -198,6 +198,14 @@ QMimeType QMediaFormat::mimeType() const return QMimeDatabase().mimeTypeForName(QString::fromLatin1(mimeTypeForFormat[fmt + 1])); } +static QPlatformMediaFormatInfo *formatInfo() +{ + QPlatformMediaFormatInfo *result = nullptr; + if (auto *pi = QPlatformMediaIntegration::instance()) + result = pi->formatInfo(); + return result; +} + /*! Returns a list of container formats that are supported for \a mode. @@ -208,7 +216,8 @@ QMimeType QMediaFormat::mimeType() const */ QList QMediaFormat::supportedFileFormats(QMediaFormat::ConversionMode m) { - return QPlatformMediaIntegration::instance()->formatInfo()->supportedFileFormats(*this, m); + auto *fi = formatInfo(); + return fi != nullptr ? fi->supportedFileFormats(*this, m) : QList{}; } /*! @@ -221,7 +230,8 @@ QList QMediaFormat::supportedFileFormats(QMediaFormat: */ QList QMediaFormat::supportedVideoCodecs(QMediaFormat::ConversionMode m) { - return QPlatformMediaIntegration::instance()->formatInfo()->supportedVideoCodecs(*this, m); + auto *fi = formatInfo(); + return fi != nullptr ? fi->supportedVideoCodecs(*this, m) : QList{}; } /*! @@ -234,7 +244,8 @@ QList QMediaFormat::supportedVideoCodecs(QMediaFormat: */ QList QMediaFormat::supportedAudioCodecs(QMediaFormat::ConversionMode m) { - return QPlatformMediaIntegration::instance()->formatInfo()->supportedAudioCodecs(*this, m); + auto *fi = formatInfo(); + return fi != nullptr ? fi->supportedAudioCodecs(*this, m) : QList{}; } QString QMediaFormat::fileFormatName(QMediaFormat::FileFormat c) diff --git a/src/multimedia/video/qvideosink.cpp b/src/multimedia/video/qvideosink.cpp index 3776b603b..18afcbfad 100644 --- a/src/multimedia/video/qvideosink.cpp +++ b/src/multimedia/video/qvideosink.cpp @@ -157,7 +157,8 @@ void QVideoSink::setNativeWindowId(WId id) if (d->window == id) return; d->window = id; - d->videoSink->setWinId(id); + if (d->videoSink != nullptr) + d->videoSink->setWinId(id); } /*! @@ -228,7 +229,8 @@ void QVideoSink::setTargetRect(const QRectF &rect) if (d->targetRect == rect) return; d->targetRect = rect; - d->videoSink->setDisplayRect(rect.toRect()); + if (d->videoSink != nullptr) + d->videoSink->setDisplayRect(rect.toRect()); } float QVideoSink::brightness() const @@ -399,7 +401,7 @@ QPlatformVideoSink *QVideoSink::platformVideoSink() const */ QSize QVideoSink::videoSize() const { - return d->videoSink->nativeSize(); + return d->videoSink ? d->videoSink->nativeSize() : QSize{}; } void QVideoSink::setSource(QObject *source) -- cgit v1.2.3