summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-05-21 11:11:52 +0200
committerLars Knoll <lars.knoll@qt.io>2021-05-21 12:28:27 +0000
commit57a11c18947a032e70d5d416e0c42d0fe8a10977 (patch)
tree54864e2c3ecfc563e564ab4663de49472d47f9ff /src
parentc7108362fe5c11db4e268231f7dda1c44e6978a1 (diff)
Correctly resolve the actual output file for QMediaEncoder
The gstreamer media encoder remembered the last location as something that could be re-used for the next encoding run. Fix that and ensure it'll pick a new file name if the requested output location is empty. Change-Id: I02077c8632fc106701e8c5081ee8b5e1361b18df Reviewed-by: André de la Rocha <andre.rocha@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp4
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp10
-rw-r--r--src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h1
3 files changed, 7 insertions, 8 deletions
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp
index 6fbd56cec..c2ad52fff 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediacapture.cpp
@@ -154,7 +154,7 @@ void QGstreamerMediaCapture::setImageCapture(QPlatformCameraImageCapture *imageC
if (m_imageCapture)
m_imageCapture->setCaptureSession(this);
- gstPipeline.setStateSync(GST_STATE_PLAYING);
+ gstPipeline.setState(GST_STATE_PLAYING);
emit imageCaptureChanged();
}
@@ -175,7 +175,7 @@ void QGstreamerMediaCapture::setMediaEncoder(QPlatformMediaEncoder *encoder)
if (m_mediaEncoder)
m_mediaEncoder->setCaptureSession(this);
if (state == GST_STATE_PLAYING)
- gstPipeline.setStateSync(state);
+ gstPipeline.setState(state);
emit encoderChanged();
gstPipeline.dumpGraph("encoder");
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp
index b73586a62..956426e8c 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder.cpp
@@ -72,12 +72,11 @@ QGstreamerMediaEncoder::~QGstreamerMediaEncoder()
QUrl QGstreamerMediaEncoder::outputLocation() const
{
- return m_outputLocation;
+ return m_requestedOutputLocation;
}
bool QGstreamerMediaEncoder::setOutputLocation(const QUrl &sink)
{
- m_outputLocation = sink;
m_requestedOutputLocation = sink;
return true;
}
@@ -300,11 +299,12 @@ void QGstreamerMediaEncoder::record()
updateStatus();
// create new encoder
+ QString outputLocation = m_requestedOutputLocation.toLocalFile();
if (m_requestedOutputLocation.isEmpty()) {
QString container = m_resolvedSettings.mimeType().preferredSuffix();
- m_outputLocation = QUrl(generateFileName(defaultDir(), container));
+ outputLocation = generateFileName(defaultDir(), container);
}
- QUrl actualSink = QUrl::fromLocalFile(QDir::currentPath()).resolved(m_outputLocation);
+ QUrl actualSink = QUrl::fromLocalFile(QDir::currentPath()).resolved(outputLocation);
qCDebug(qLcMediaEncoder) << "recording new video to" << actualSink;
Q_ASSERT(!actualSink.isEmpty());
@@ -335,7 +335,7 @@ void QGstreamerMediaEncoder::record()
heartbeat.start();
gstPipeline.dumpGraph("recording");
- actualLocationChanged(m_outputLocation);
+ actualLocationChanged(QUrl::fromLocalFile(outputLocation));
updateStatus();
}
diff --git a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h
index 502adb6e9..ae4170c5d 100644
--- a/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h
+++ b/src/multimedia/platform/gstreamer/mediacapture/qgstreamermediaencoder_p.h
@@ -104,7 +104,6 @@ private:
QString generateFileName(const QDir &dir, const QString &ext) const;
QUrl m_requestedOutputLocation;
- QUrl m_outputLocation;
QMediaEncoderSettings m_settings;
QMediaEncoderSettings m_resolvedSettings;
QGstreamerMediaCapture *m_session = nullptr;