summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2024-02-28 10:54:44 +0800
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-02-29 13:13:54 +0000
commit0f5c60d0893773301f7147535b1de1a2e22b8e68 (patch)
tree55e4dbdcd2d31466d1cbc2fcbed5bb16a8bc42a3
parent87c043f584612c14a527fe178e626539a4287dad (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.cpp56
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