diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-05-20 14:45:13 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-05-21 09:53:15 +0000 |
commit | 63a073533f1fe283d9f7804a2c4bdff54f6d9522 (patch) | |
tree | baa5c1fff820ad89e4cf653e8a06c176f37d517a | |
parent | 84fc04caae9103aea0bbf0fe6d33143e2a28425f (diff) |
Fix camera not showing up on gstreamer
Apparently, the gstreamer encodebin needs an encoding to
be set up very early on. Fixes a regression after change
3e913c0814464bd9b09307d2e3d7c6763a1481b3.
Change-Id: I7cb223a46ff2934dbffe30cc2a803eb52cb297a8
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r-- | src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp | 12 | ||||
-rw-r--r-- | src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h | 1 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp index 7b12e6dcb..86b57139c 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp @@ -296,7 +296,7 @@ void QGstreamerMediaEncoder::record() // create new encoder if (m_requestedOutputLocation.isEmpty()) { - QString container = m_settings.mimeType().preferredSuffix(); + QString container = m_resolvedSettings.mimeType().preferredSuffix(); m_outputLocation = QUrl(generateFileName(defaultDir(), container)); } QUrl actualSink = QUrl::fromLocalFile(QDir::currentPath()).resolved(m_outputLocation); @@ -314,7 +314,7 @@ void QGstreamerMediaEncoder::record() QGstPad audioPad = gstEncoder.getRequestPad("audio_%u"); audioSrcPad.link(audioPad); - if (m_settings.videoCodec() != QMediaFormat::VideoCodec::Unspecified) { + if (m_resolvedSettings.videoCodec() != QMediaFormat::VideoCodec::Unspecified) { videoSrcPad = m_session->getVideoPad(); if (!videoSrcPad.isNull()) { QGstPad videoPad = gstEncoder.getRequestPad("video_%u"); @@ -393,9 +393,10 @@ void QGstreamerMediaEncoder::applySettings() return; const auto flag = m_session->camera() ? QMediaEncoderSettings::RequiresVideo : QMediaEncoderSettings::NoFlags; - m_settings.resolveFormat(flag); + m_resolvedSettings = m_settings; + m_resolvedSettings.resolveFormat(flag); - auto *encodingProfile = createEncodingProfile(m_settings); + auto *encodingProfile = createEncodingProfile(m_resolvedSettings); g_object_set (gstEncoder.object(), "profile", encodingProfile, nullptr); gst_encoding_profile_unref(encodingProfile); } @@ -403,6 +404,7 @@ void QGstreamerMediaEncoder::applySettings() void QGstreamerMediaEncoder::setEncoderSettings(const QMediaEncoderSettings &settings) { m_settings = settings; + applySettings(); } void QGstreamerMediaEncoder::setMetaData(const QMediaMetaData &metaData) @@ -460,7 +462,7 @@ QDir QGstreamerMediaEncoder::defaultDir() const { QStringList dirCandidates; - if (m_settings.videoCodec() != QMediaFormat::VideoCodec::Unspecified) + if (m_resolvedSettings.videoCodec() != QMediaFormat::VideoCodec::Unspecified) dirCandidates << QStandardPaths::writableLocation(QStandardPaths::MoviesLocation); else dirCandidates << QStandardPaths::writableLocation(QStandardPaths::MusicLocation); diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h index 262bbdd45..502adb6e9 100644 --- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h +++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h @@ -106,6 +106,7 @@ private: QUrl m_requestedOutputLocation; QUrl m_outputLocation; QMediaEncoderSettings m_settings; + QMediaEncoderSettings m_resolvedSettings; QGstreamerMediaCapture *m_session = nullptr; QGstreamerMetaData m_metaData; QElapsedTimer m_duration; |