7#include <gst/gstclock.h>
15 return dbg <<
str.get();
20 return dbg << caps.
caps();
30 return dbg <<
value.value;
40 return dbg <<
handle.get();
45 return dbg <<
handle.get();
50 return dbg << element.
element();
55 return dbg << pad.
pad();
61 return dbg <<
QGString(gst_caps_to_string(caps));
68#if GST_CHECK_VERSION(1, 20, 0)
70 gst_video_info_to_caps(
info),
75 gst_video_info_to_caps(
const_cast<GstVideoInfo *
>(
info)),
84 return dbg <<
QGString(gst_structure_to_string(structure));
91 dbg <<
QGString{gst_object_get_name(
const_cast<GstObject*
>(
object))};
100 GParamSpec **
properties = g_object_class_list_properties(G_OBJECT_GET_CLASS(
object), &numProperties);
102 for (guint
i = 0;
i < numProperties;
i++) {
105 const gchar *
name = g_param_spec_get_name(
param);
106 constexpr bool trace_blurb =
false;
107 if constexpr (trace_blurb) {
108 const gchar *blurb = g_param_spec_get_blurb(
param);
109 dbg <<
name <<
" (" << blurb <<
"): ";
113 bool readable = bool(
param->flags & G_PARAM_READABLE);
115 dbg <<
"(not readable)";
123 g_object_get_property(&
const_cast<GstObject *
>(
object)->
object,
param->name,
127 if (
i != numProperties - 1)
140 return dbg << GST_OBJECT_CAST(element);
145 return dbg << GST_OBJECT_CAST(pad);
150 GstDevice *
d =
const_cast<GstDevice *
>(
device);
154 dbg << gst_device_get_display_name(
d) <<
"(" << gst_device_get_device_class(
d) <<
") ";
164 explicit Timepoint(guint64 us) : ts{ us } { }
171 snprintf(
buffer,
sizeof(
buffer),
"%" GST_TIME_FORMAT, GST_TIME_ARGS(ts.ts));
183 dbg << GST_MESSAGE_TYPE_NAME(msg) <<
", Source: " << GST_MESSAGE_SRC_NAME(msg);
184 if (GST_MESSAGE_TIMESTAMP(msg) != 0xFFFFFFFFFFFFFFFF)
185 dbg <<
", Timestamp: " << GST_MESSAGE_TIMESTAMP(msg);
188 case GST_MESSAGE_ERROR: {
191 gst_message_parse_error(
const_cast<GstMessage *
>(msg), &err, &
debug);
193 dbg <<
", Error: " << err <<
" (" <<
debug <<
")";
197 case GST_MESSAGE_WARNING: {
200 gst_message_parse_warning(
const_cast<GstMessage *
>(msg), &err, &
debug);
202 dbg <<
", Warning: " << err <<
" (" <<
debug <<
")";
206 case GST_MESSAGE_INFO: {
209 gst_message_parse_info(
const_cast<GstMessage *
>(msg), &err, &
debug);
211 dbg <<
", Info: " << err <<
" (" <<
debug <<
")";
215 case GST_MESSAGE_QOS: {
217 guint64 running_time;
222 gst_message_parse_qos(
const_cast<GstMessage *
>(msg), &live, &running_time, &stream_time,
223 ×tamp, &duration);
225 dbg <<
", Live: " << bool(live) <<
", Running time: " << Timepoint{ running_time }
226 <<
", Stream time: " << Timepoint{ stream_time }
227 <<
", Timestamp: " << Timepoint{ timestamp } <<
", Duration: " << Timepoint{ duration };
231 case GST_MESSAGE_STATE_CHANGED: {
236 gst_message_parse_state_changed(
const_cast<GstMessage *
>(msg), &oldState, &
newState,
239 dbg <<
", Transition: " << oldState <<
"->" <<
newState;
241 if (
pending != GST_STATE_VOID_PENDING)
242 dbg <<
", Pending State: " <<
pending;
254 dbg <<
QGString{ gst_tag_list_to_string(tagList) };
260 dbg << GST_QUERY_TYPE_NAME(
query);
266 dbg << GST_EVENT_TYPE_NAME(
event);
282 return dbg << gst_element_state_get_name(
state);
287 return dbg << gst_state_change_get_name(transition);
292 return dbg << gst_element_state_change_return_get_name(stateChangeReturn);
297 return dbg << gst_message_type_get_name(
type);
303 case GST_PAD_UNKNOWN:
304 return dbg <<
"GST_PAD_UNKNOWN";
306 return dbg <<
"GST_PAD_SRC";
308 return dbg <<
"GST_PAD_SINK";
315 switch (G_VALUE_TYPE(
value)) {
317 return dbg << g_value_get_string(
value);
319 return dbg << g_value_get_boolean(
value);
321 return dbg << g_value_get_ulong(
value);
323 return dbg << g_value_get_long(
value);
325 return dbg << g_value_get_uint(
value);
327 return dbg << g_value_get_int(
value);
329 return dbg << g_value_get_uint64(
value);
331 return dbg << g_value_get_int64(
value);
333 return dbg << g_value_get_float(
value);
335 return dbg << g_value_get_double(
value);
340 if (GST_VALUE_HOLDS_BITMASK(
value)) {
345 if (GST_VALUE_HOLDS_FRACTION(
value))
346 return dbg << gst_value_get_fraction_numerator(
value) <<
"/"
347 << gst_value_get_fraction_denominator(
value);
349 if (GST_VALUE_HOLDS_CAPS(
value))
350 return dbg << gst_value_get_caps(
value);
352 if (GST_VALUE_HOLDS_STRUCTURE(
value))
353 return dbg << gst_value_get_structure(
value);
355 if (GST_VALUE_HOLDS_ARRAY(
value)) {
356 const guint
size = gst_value_array_get_size(
value);
357 const guint last =
size - 1;
360 dbg << gst_value_array_get_value(
value,
index);
368 if (G_VALUE_TYPE(
value) == GST_TYPE_PAD_DIRECTION) {
369 GstPadDirection
direction =
static_cast<GstPadDirection
>(g_value_get_enum(
value));
373 if (G_VALUE_TYPE(
value) == GST_TYPE_PAD_TEMPLATE) {
374 GstPadTemplate *padTemplate =
static_cast<GstPadTemplate *
>(g_value_get_object(
value));
375 return dbg << padTemplate;
378 dbg <<
"(not implemented: " << G_VALUE_TYPE_NAME(
value) <<
")";
385 return dbg <<
error->message;
404 std::optional<QDebugStateSaver> saver(dbg);
407 switch (GST_MESSAGE_TYPE(
m.msg)) {
408 case GST_MESSAGE_ERROR: {
411 gst_message_parse_error(
m.msg, &err, &
debug);
412 dbg << err <<
" (" <<
debug <<
")";
416 case GST_MESSAGE_WARNING: {
419 gst_message_parse_warning(
m.msg, &err, &
debug);
420 dbg << err <<
" (" <<
debug <<
")";
424 case GST_MESSAGE_INFO: {
427 gst_message_parse_info(
m.msg, &err, &
debug);
429 dbg << err <<
" (" <<
debug <<
")";
433 case GST_MESSAGE_STATE_CHANGED: {
440 dbg << oldState <<
" -> " <<
newState;
441 if (
pending != GST_STATE_VOID_PENDING)
442 dbg <<
" (pending: " <<
pending <<
")";
IOBluetoothDevice * device
GstElement * element() const
const GstStructure * structure
GstMessage * message() const
void newState(QList< State > &states, const char *token, const char *lexem, bool pre)
Combined button and popup list for selecting options.
QTextStream & hex(QTextStream &stream)
Calls QTextStream::setIntegerBase(16) on stream and returns stream.
static const QCssKnownValue properties[NumProperties - 1]
DBusConnection const char DBusError * error
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage return DBusPendingCall * pending
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
QT_BEGIN_NAMESPACE QDebug operator<<(QDebug dbg, const QGString &str)
QUniqueHandle< QGstImpl::QUniqueGstStructureHandleTraits > QUniqueGstStructureHandle
GLuint64 GLenum void * handle
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint GLsizei const GLchar * message
GLenum const GLint * param
QCompactGstMessageAdaptor(const QGstreamerMessage &m)