diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-05-21 11:11:52 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-05-21 12:28:27 +0000 |
commit | 57a11c18947a032e70d5d416e0c42d0fe8a10977 (patch) | |
tree | 54864e2c3ecfc563e564ab4663de49472d47f9ff /src | |
parent | c7108362fe5c11db4e268231f7dda1c44e6978a1 (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')
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; |