summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-05-20 14:45:13 +0200
committerLars Knoll <lars.knoll@qt.io>2021-05-21 09:53:15 +0000
commit63a073533f1fe283d9f7804a2c4bdff54f6d9522 (patch)
treebaa5c1fff820ad89e4cf653e8a06c176f37d517a /src
parent84fc04caae9103aea0bbf0fe6d33143e2a28425f (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>
Diffstat (limited to 'src')
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp12
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h1
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;