summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2023-08-09 13:27:55 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-08-09 14:49:41 +0000
commit6d36afb3117208acc37f011b304f03392eae8535 (patch)
treec427727e0efae8b7acdc46c7d06a4fcf2f8bd09f
parentb73e82a2a6de736d5974ef0289840d069eb21666 (diff)
Minor cleanup in qffmpegmediarecorder
* use std::unique_ptr for finalization * remove extra static cast * remove unused headers Change-Id: Ie924cc60e6b87ebc6a64be77eb4cb82884b69ef2 Reviewed-by: Pavel Dubsky <pavel.dubsky@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io> Reviewed-by: Lars Knoll <lars@knoll.priv.no> (cherry picked from commit b9fb4cb19b767f749439b46d3eb6f80212d719a2) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpegmediarecorder.cpp62
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpegmediarecorder_p.h15
2 files changed, 39 insertions, 38 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegmediarecorder.cpp b/src/plugins/multimedia/ffmpeg/qffmpegmediarecorder.cpp
index 86903882b..f4eab661d 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpegmediarecorder.cpp
+++ b/src/plugins/multimedia/ffmpeg/qffmpegmediarecorder.cpp
@@ -10,28 +10,20 @@
#include "qffmpegaudioinput_p.h"
#include "qaudiobuffer.h"
#include "qffmpegencoder_p.h"
-#include "qffmpegmediaformatinfo_p.h"
+#include "qffmpegmediacapturesession_p.h"
#include <qdebug.h>
-#include <qeventloop.h>
-#include <qstandardpaths.h>
-#include <qmimetype.h>
#include <qloggingcategory.h>
-static Q_LOGGING_CATEGORY(qLcMediaEncoder, "qt.multimedia.encoder")
+static Q_LOGGING_CATEGORY(qLcMediaEncoder, "qt.multimedia.ffmpeg.encoder");
QT_BEGIN_NAMESPACE
-QFFmpegMediaRecorder::QFFmpegMediaRecorder(QMediaRecorder *parent)
- : QPlatformMediaRecorder(parent)
+QFFmpegMediaRecorder::QFFmpegMediaRecorder(QMediaRecorder *parent) : QPlatformMediaRecorder(parent)
{
}
-QFFmpegMediaRecorder::~QFFmpegMediaRecorder()
-{
- if (encoder)
- encoder->finalize();
-}
+QFFmpegMediaRecorder::~QFFmpegMediaRecorder() = default;
bool QFFmpegMediaRecorder::isLocationWritable(const QUrl &) const
{
@@ -70,28 +62,31 @@ void QFFmpegMediaRecorder::record(QMediaEncoderSettings &settings)
Q_ASSERT(!actualSink.isEmpty());
- encoder = new QFFmpeg::Encoder(settings, actualSink);
- encoder->setMetaData(m_metaData);
- connect(encoder, &QFFmpeg::Encoder::durationChanged, this, &QFFmpegMediaRecorder::newDuration);
- connect(encoder, &QFFmpeg::Encoder::finalizationDone, this, &QFFmpegMediaRecorder::finalizationDone);
- connect(encoder, &QFFmpeg::Encoder::error, this, &QFFmpegMediaRecorder::handleSessionError);
+ m_encoder.reset(new Encoder(settings, actualSink));
+ m_encoder->setMetaData(m_metaData);
+ connect(m_encoder.get(), &QFFmpeg::Encoder::durationChanged, this,
+ &QFFmpegMediaRecorder::newDuration);
+ connect(m_encoder.get(), &QFFmpeg::Encoder::finalizationDone, this,
+ &QFFmpegMediaRecorder::finalizationDone);
+ connect(m_encoder.get(), &QFFmpeg::Encoder::error, this,
+ &QFFmpegMediaRecorder::handleSessionError);
auto *audioInput = m_session->audioInput();
if (audioInput) {
if (audioInput->device.isNull())
qWarning() << "Audio input device is null; cannot encode audio";
else
- encoder->addAudioInput(static_cast<QFFmpegAudioInput *>(audioInput));
+ m_encoder->addAudioInput(static_cast<QFFmpegAudioInput *>(audioInput));
}
for (auto source : videoSources)
- encoder->addVideoSource(source);
+ m_encoder->addVideoSource(source);
durationChanged(0);
stateChanged(QMediaRecorder::RecordingState);
actualLocationChanged(QUrl::fromLocalFile(location));
- encoder->start();
+ m_encoder->start();
}
void QFFmpegMediaRecorder::pause()
@@ -99,8 +94,8 @@ void QFFmpegMediaRecorder::pause()
if (!m_session || state() != QMediaRecorder::RecordingState)
return;
- Q_ASSERT(encoder);
- encoder->setPaused(true);
+ Q_ASSERT(m_encoder);
+ m_encoder->setPaused(true);
stateChanged(QMediaRecorder::PausedState);
}
@@ -110,8 +105,8 @@ void QFFmpegMediaRecorder::resume()
if (!m_session || state() != QMediaRecorder::PausedState)
return;
- Q_ASSERT(encoder);
- encoder->setPaused(false);
+ Q_ASSERT(m_encoder);
+ m_encoder->setPaused(false);
stateChanged(QMediaRecorder::RecordingState);
}
@@ -124,12 +119,8 @@ void QFFmpegMediaRecorder::stop()
if (input)
static_cast<QFFmpegAudioInput *>(input)->setRunning(false);
qCDebug(qLcMediaEncoder) << "stop";
- // ### all of the below should be done asynchronous. finalize() should do it's work in a thread
- // to avoid blocking the UI in case of slow codecs
- if (encoder) {
- encoder->finalize();
- encoder = nullptr;
- }
+
+ m_encoder.reset();
}
void QFFmpegMediaRecorder::finalizationDone()
@@ -149,9 +140,9 @@ QMediaMetaData QFFmpegMediaRecorder::metaData() const
return m_metaData;
}
-void QFFmpegMediaRecorder::setCaptureSession(QPlatformMediaCaptureSession *session)
+void QFFmpegMediaRecorder::setCaptureSession(QFFmpegMediaCaptureSession *session)
{
- auto *captureSession = static_cast<QFFmpegMediaCaptureSession *>(session);
+ auto *captureSession = session;
if (m_session == captureSession)
return;
@@ -163,6 +154,13 @@ void QFFmpegMediaRecorder::setCaptureSession(QPlatformMediaCaptureSession *sessi
return;
}
+void QFFmpegMediaRecorder::EncoderDeleter::operator()(Encoder *encoder) const
+{
+ // ### all of the below should be done asynchronous. finalize() should do it's work in a thread
+ // to avoid blocking the UI in case of slow codecs
+ encoder->finalize();
+}
+
QT_END_NAMESPACE
#include "moc_qffmpegmediarecorder_p.cpp"
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegmediarecorder_p.h b/src/plugins/multimedia/ffmpeg/qffmpegmediarecorder_p.h
index 26f4c16ad..c8e2ffd6a 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpegmediarecorder_p.h
+++ b/src/plugins/multimedia/ffmpeg/qffmpegmediarecorder_p.h
@@ -1,7 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
-
#ifndef QFFMPEGMEDIARECODER_H
#define QFFMPEGMEDIARECODER_H
@@ -17,9 +16,6 @@
//
#include <private/qplatformmediarecorder_p.h>
-#include "qffmpegmediacapturesession_p.h"
-
-#include "qffmpeg_p.h"
QT_BEGIN_NAMESPACE
@@ -27,6 +23,7 @@ class QAudioSource;
class QAudioSourceIO;
class QAudioBuffer;
class QMediaMetaData;
+class QFFmpegMediaCaptureSession;
namespace QFFmpeg {
class Encoder;
@@ -49,7 +46,7 @@ public:
void setMetaData(const QMediaMetaData &) override;
QMediaMetaData metaData() const override;
- void setCaptureSession(QPlatformMediaCaptureSession *session);
+ void setCaptureSession(QFFmpegMediaCaptureSession *session);
private Q_SLOTS:
void newDuration(qint64 d) { durationChanged(d); }
@@ -57,10 +54,16 @@ private Q_SLOTS:
void handleSessionError(QMediaRecorder::Error code, const QString &description);
private:
+ using Encoder = QFFmpeg::Encoder;
+ struct EncoderDeleter
+ {
+ void operator()(Encoder *) const;
+ };
+
QFFmpegMediaCaptureSession *m_session = nullptr;
QMediaMetaData m_metaData;
- QFFmpeg::Encoder *encoder = nullptr;
+ std::unique_ptr<Encoder, EncoderDeleter> m_encoder;
};
QT_END_NAMESPACE