diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2023-08-09 13:27:55 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-08-09 14:49:41 +0000 |
commit | 6d36afb3117208acc37f011b304f03392eae8535 (patch) | |
tree | c427727e0efae8b7acdc46c7d06a4fcf2f8bd09f | |
parent | b73e82a2a6de736d5974ef0289840d069eb21666 (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.cpp | 62 | ||||
-rw-r--r-- | src/plugins/multimedia/ffmpeg/qffmpegmediarecorder_p.h | 15 |
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 |