diff options
author | Tim Blechmann <tim@klingt.org> | 2024-02-28 10:54:44 +0800 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-02-29 13:13:54 +0000 |
commit | 0f5c60d0893773301f7147535b1de1a2e22b8e68 (patch) | |
tree | 55e4dbdcd2d31466d1cbc2fcbed5bb16a8bc42a3 | |
parent | 87c043f584612c14a527fe178e626539a4287dad (diff) |
GStreamer: encoder - processBusMessage improvements
* avoid unnecessary message copy/reference count
* use switch statement to dispatch message types
* use if constexpr for extended tracing
Pick-to: 6.6 6.5
Change-Id: I0e004305605a502bd2e20a23bde379678fd2e871
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
Reviewed-by: Mikko Hallamaa <mikko.hallamaa@qt.io>
Reviewed-by: Lars Sutterud <lars.sutterud@qt.io>
(cherry picked from commit 61fa11a74e434d7104b67db292a4de852d38dabd)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediaencoder.cpp | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediaencoder.cpp b/src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediaencoder.cpp index fff4c9102..bab2bd5da 100644 --- a/src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediaencoder.cpp +++ b/src/plugins/multimedia/gstreamer/mediacapture/qgstreamermediaencoder.cpp @@ -6,6 +6,7 @@ #include "qgstreamerformatinfo_p.h" #include "qgstpipeline_p.h" #include "qgstreamermessage_p.h" +#include "qgst_debug_p.h" #include <private/qplatformcamera_p.h> #include "qaudiodevice.h" #include <private/qmediastoragelocation_p.h> @@ -55,36 +56,35 @@ void QGstreamerMediaEncoder::handleSessionError(QMediaRecorder::Error code, cons stop(); } -bool QGstreamerMediaEncoder::processBusMessage(const QGstreamerMessage &message) +bool QGstreamerMediaEncoder::processBusMessage(const QGstreamerMessage &msg) { - if (message.isNull()) + constexpr bool traceStateChange = false; + constexpr bool traceAllEvents = false; + + if (msg.isNull()) return false; - auto msg = message; - -// qCDebug(qLcMediaEncoderGst) << "received event from" << message.source().name() << Qt::hex << message.type(); -// if (message.type() == GST_MESSAGE_STATE_CHANGED) { -// GstState oldState; -// GstState newState; -// GstState pending; -// gst_message_parse_state_changed(gm, &oldState, &newState, &pending); -// qCDebug(qLcMediaEncoderGst) << "received state change from" << message.source().name() << oldState << newState << pending; -// } - if (msg.type() == GST_MESSAGE_ELEMENT) { + + if constexpr (traceAllEvents) + qCDebug(qLcMediaEncoderGst) << "received event:" << msg; + + switch (msg.type()) { + case GST_MESSAGE_ELEMENT: { QGstStructure s = msg.structure(); - qCDebug(qLcMediaEncoderGst) << "received element message from" << msg.source().name() << s.name(); if (s.name() == "GstBinForwarded") - msg = s.getMessage(); - if (msg.isNull()) - return false; + return processBusMessage(s.getMessage()); + + qCDebug(qLcMediaEncoderGst) + << "received element message from" << msg.source().name() << s.name(); + return false; } - if (msg.type() == GST_MESSAGE_EOS) { + case GST_MESSAGE_EOS: { qCDebug(qLcMediaEncoderGst) << "received EOS from" << msg.source().name(); finalize(); return false; } - if (msg.type() == GST_MESSAGE_ERROR) { + case GST_MESSAGE_ERROR: { QUniqueGErrorHandle err; QGString debug; gst_message_parse_error(msg.message(), &err, &debug); @@ -92,9 +92,25 @@ bool QGstreamerMediaEncoder::processBusMessage(const QGstreamerMessage &message) if (!m_finalizing) stop(); finalize(); + return false; } - return false; + case GST_MESSAGE_STATE_CHANGED: { + if constexpr (traceStateChange) { + GstState oldState; + GstState newState; + GstState pending; + gst_message_parse_state_changed(msg.message(), &oldState, &newState, &pending); + qCDebug(qLcMediaEncoderGst) << "received state change from" << msg.source().name() + << oldState << newState << pending; + } + + return false; + } + + default: + return false; + }; } qint64 QGstreamerMediaEncoder::duration() const |