summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJøger Hansegård <joger.hansegard@qt.io>2024-04-01 15:56:23 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-04-02 02:15:00 +0000
commit0241788e99ff236bf52d07ee8a83c4f60b7c9afc (patch)
tree31aae7ea44e14f782172943756f93b9cb73fb267
parent4f178eda0958f5f4b0fda1266f73cbe90cd4f0c4 (diff)
Move FFmpeg::Muxer into its own file
This helps readability because the qffmpegrecordingengine_p.h file is quite big. Task-number: QTBUG-121792 Pick-to: 6.5 Change-Id: Ibb8a51937622f44820e7f0b46b32f20f47225216 Reviewed-by: Artem Dyomin <artem.dyomin@qt.io> (cherry picked from commit 1e69b9774b65d43ca8c6197f8c5031c5955fdcc7) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> (cherry picked from commit a149227f76911e6953636ec07a59525acb34cfb6)
-rw-r--r--src/plugins/multimedia/ffmpeg/CMakeLists.txt2
-rw-r--r--src/plugins/multimedia/ffmpeg/recordingengine/qffmpegmuxer.cpp60
-rw-r--r--src/plugins/multimedia/ffmpeg/recordingengine/qffmpegmuxer_p.h44
-rw-r--r--src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine.cpp64
-rw-r--r--src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine_p.h35
5 files changed, 119 insertions, 86 deletions
diff --git a/src/plugins/multimedia/ffmpeg/CMakeLists.txt b/src/plugins/multimedia/ffmpeg/CMakeLists.txt
index e0d5576cb..c6c1fd37f 100644
--- a/src/plugins/multimedia/ffmpeg/CMakeLists.txt
+++ b/src/plugins/multimedia/ffmpeg/CMakeLists.txt
@@ -58,6 +58,8 @@ qt_internal_add_plugin(QFFmpegMediaPlugin
recordingengine/qffmpegaudioencoderutils.cpp
recordingengine/qffmpegencoderoptions_p.h
recordingengine/qffmpegencoderoptions.cpp
+ recordingengine/qffmpegmuxer_p.h
+ recordingengine/qffmpegmuxer.cpp
recordingengine/qffmpegrecordingengine_p.h
recordingengine/qffmpegrecordingengine.cpp
recordingengine/qffmpegvideoencoderutils_p.h
diff --git a/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegmuxer.cpp b/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegmuxer.cpp
new file mode 100644
index 000000000..6367dde3b
--- /dev/null
+++ b/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegmuxer.cpp
@@ -0,0 +1,60 @@
+// Copyright (C) 2024 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
+#include "qffmpegmuxer_p.h"
+#include "qffmpegrecordingengine_p.h"
+#include <QtCore/qloggingcategory.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QFFmpeg {
+
+static Q_LOGGING_CATEGORY(qLcFFmpegMuxer, "qt.multimedia.ffmpeg.muxer");
+
+Muxer::Muxer(RecordingEngine *encoder) : m_encoder(encoder)
+{
+ setObjectName(QLatin1String("Muxer"));
+}
+
+void Muxer::addPacket(AVPacketUPtr packet)
+{
+ {
+ QMutexLocker locker(&m_queueMutex);
+ m_packetQueue.push(std::move(packet));
+ }
+
+ // qCDebug(qLcFFmpegEncoder) << "Muxer::addPacket" << packet->pts << packet->stream_index;
+ dataReady();
+}
+
+AVPacketUPtr Muxer::takePacket()
+{
+ QMutexLocker locker(&m_queueMutex);
+ return dequeueIfPossible(m_packetQueue);
+}
+
+void Muxer::init()
+{
+ qCDebug(qLcFFmpegMuxer) << "Muxer::init started thread.";
+}
+
+void Muxer::cleanup() { }
+
+bool QFFmpeg::Muxer::hasData() const
+{
+ QMutexLocker locker(&m_queueMutex);
+ return !m_packetQueue.empty();
+}
+
+void Muxer::processOne()
+{
+ auto packet = takePacket();
+ // qCDebug(qLcFFmpegEncoder) << "writing packet to file" << packet->pts << packet->duration <<
+ // packet->stream_index;
+
+ // the function takes ownership for the packet
+ av_interleaved_write_frame(m_encoder->avFormatContext(), packet.release());
+}
+
+} // namespace QFFmpeg
+
+QT_END_NAMESPACE
diff --git a/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegmuxer_p.h b/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegmuxer_p.h
new file mode 100644
index 000000000..a50ffc6a2
--- /dev/null
+++ b/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegmuxer_p.h
@@ -0,0 +1,44 @@
+// Copyright (C) 2024 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 QFFMPEGMUXER_P_H
+#define QFFMPEGMUXER_P_H
+
+#include "qffmpegthread_p.h"
+#include "qffmpeg_p.h"
+#include <QtCore/QtGlobal>
+#include <QtCore/qobject.h>
+#include <queue>
+
+QT_BEGIN_NAMESPACE
+
+namespace QFFmpeg {
+
+class RecordingEngine;
+
+class Muxer : public ConsumerThread
+{
+public:
+ Muxer(RecordingEngine *encoder);
+
+ void addPacket(AVPacketUPtr packet);
+
+private:
+ AVPacketUPtr takePacket();
+
+ void init() override;
+ void cleanup() override;
+ bool hasData() const override;
+ void processOne() override;
+
+private:
+ mutable QMutex m_queueMutex;
+ std::queue<AVPacketUPtr> m_packetQueue;
+
+ RecordingEngine *m_encoder;
+};
+
+} // namespace QFFmpeg
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine.cpp b/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine.cpp
index d1d0b2ba4..485e39dc9 100644
--- a/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine.cpp
+++ b/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine.cpp
@@ -16,7 +16,7 @@
#include "qffmpegmediametadata_p.h"
#include "qffmpegencoderoptions_p.h"
#include "qffmpegaudioencoderutils_p.h"
-
+#include "qffmpegmuxer_p.h"
#include <qloggingcategory.h>
extern "C" {
@@ -31,21 +31,6 @@ static Q_LOGGING_CATEGORY(qLcFFmpegEncoder, "qt.multimedia.ffmpeg.encoder");
namespace QFFmpeg
{
-namespace {
-
-template<typename T>
-T dequeueIfPossible(std::queue<T> &queue)
-{
- if (queue.empty())
- return T{};
-
- auto result = std::move(queue.front());
- queue.pop();
- return result;
-}
-
-} // namespace
-
RecordingEngine::RecordingEngine(const QMediaEncoderSettings &settings,
std::unique_ptr<EncodingFormatContext> context)
: m_settings(settings), m_formatContext(std::move(context)), m_muxer(new Muxer(this))
@@ -197,53 +182,6 @@ void RecordingEngine::addMediaFrameHandler(Args &&...args)
m_connections.append(connection);
}
-Muxer::Muxer(RecordingEngine *encoder) : m_encoder(encoder)
-{
- setObjectName(QLatin1String("Muxer"));
-}
-
-void Muxer::addPacket(AVPacketUPtr packet)
-{
- {
- QMutexLocker locker(&m_queueMutex);
- m_packetQueue.push(std::move(packet));
- }
-
- // qCDebug(qLcFFmpegEncoder) << "Muxer::addPacket" << packet->pts << packet->stream_index;
- dataReady();
-}
-
-AVPacketUPtr Muxer::takePacket()
-{
- QMutexLocker locker(&m_queueMutex);
- return dequeueIfPossible(m_packetQueue);
-}
-
-void Muxer::init()
-{
- qCDebug(qLcFFmpegEncoder) << "Muxer::init started thread.";
-}
-
-void Muxer::cleanup()
-{
-}
-
-bool QFFmpeg::Muxer::hasData() const
-{
- QMutexLocker locker(&m_queueMutex);
- return !m_packetQueue.empty();
-}
-
-void Muxer::processOne()
-{
- auto packet = takePacket();
- // qCDebug(qLcFFmpegEncoder) << "writing packet to file" << packet->pts << packet->duration <<
- // packet->stream_index;
-
- // the function takes ownership for the packet
- av_interleaved_write_frame(m_encoder->avFormatContext(), packet.release());
-}
-
AudioEncoder::AudioEncoder(RecordingEngine *encoder, QFFmpegAudioInput *input,
const QMediaEncoderSettings &settings)
: EncoderThread(encoder), m_input(input), m_settings(settings)
diff --git a/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine_p.h b/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine_p.h
index aafee5b67..86e322a33 100644
--- a/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine_p.h
+++ b/src/plugins/multimedia/ffmpeg/recordingengine/qffmpegrecordingengine_p.h
@@ -44,6 +44,18 @@ class AudioEncoder;
class VideoEncoder;
class VideoFrameEncoder;
+
+template <typename T>
+T dequeueIfPossible(std::queue<T> &queue)
+{
+ if (queue.empty())
+ return T{};
+
+ auto result = std::move(queue.front());
+ queue.pop();
+ return result;
+}
+
class EncodingFinalizer : public QThread
{
public:
@@ -108,29 +120,6 @@ private:
bool m_isHeaderWritten = false;
};
-
-class Muxer : public ConsumerThread
-{
-public:
- Muxer(RecordingEngine *encoder);
-
- void addPacket(AVPacketUPtr packet);
-
-private:
- AVPacketUPtr takePacket();
-
- void init() override;
- void cleanup() override;
- bool hasData() const override;
- void processOne() override;
-
-private:
- mutable QMutex m_queueMutex;
- std::queue<AVPacketUPtr> m_packetQueue;
-
- RecordingEngine *m_encoder;
-};
-
class EncoderThread : public ConsumerThread
{
public: