Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qgst_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QGST_P_H
5#define QGST_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtCore/qdebug.h>
19#include <QtCore/qlist.h>
20#include <QtCore/qsemaphore.h>
21
22#include <QtMultimedia/qaudioformat.h>
23#include <QtMultimedia/qvideoframe.h>
24#include <QtMultimedia/private/qtmultimediaglobal_p.h>
25#include <QtMultimedia/private/qmultimediautils_p.h>
26
27#include <gst/gst.h>
28#include <gst/video/video-info.h>
29
30#include "qgst_handle_types_p.h"
31
32#include <type_traits>
33
34#if QT_CONFIG(gstreamer_photography)
35# define GST_USE_UNSTABLE_API
36# include <gst/interfaces/photography.h>
37# undef GST_USE_UNSTABLE_API
38#endif
39
40#if QT_CONFIG(gstreamer_app)
41# include <gst/app/gstappsink.h>
42# include <gst/app/gstappsrc.h>
43#endif
44
46
47namespace QGstImpl {
48
49template <typename T>
51{
52 // using Type = T;
53 // template <typename U>
54 // static bool isObjectOfType(U *);
55 // template <typename U>
56 // static T *cast(U *);
57};
58
59#define QGST_DEFINE_CAST_TRAITS(ClassName, MACRO_LABEL) \
60 template <> \
61 struct GstObjectTraits<ClassName> \
62 { \
63 using Type = ClassName; \
64 template <typename U> \
65 static bool isObjectOfType(U *arg) \
66 { \
67 return GST_IS_##MACRO_LABEL(arg); \
68 } \
69 template <typename U> \
70 static Type *cast(U *arg) \
71 { \
72 return GST_##MACRO_LABEL##_CAST(arg); \
73 } \
74 template <typename U> \
75 static Type *checked_cast(U *arg) \
76 { \
77 return GST_##MACRO_LABEL(arg); \
78 } \
79 }; \
80 static_assert(true, "ensure semicolon")
81
82#define QGST_DEFINE_CAST_TRAITS_FOR_INTERFACE(ClassName, MACRO_LABEL) \
83 template <> \
84 struct GstObjectTraits<ClassName> \
85 { \
86 using Type = ClassName; \
87 template <typename U> \
88 static bool isObjectOfType(U *arg) \
89 { \
90 return GST_IS_##MACRO_LABEL(arg); \
91 } \
92 template <typename U> \
93 static Type *cast(U *arg) \
94 { \
95 return checked_cast(arg); \
96 } \
97 template <typename U> \
98 static Type *checked_cast(U *arg) \
99 { \
100 return GST_##MACRO_LABEL(arg); \
101 } \
102 }; \
103 static_assert(true, "ensure semicolon")
104
106QGST_DEFINE_CAST_TRAITS(GstClock, CLOCK);
107QGST_DEFINE_CAST_TRAITS(GstElement, ELEMENT);
108QGST_DEFINE_CAST_TRAITS(GstObject, OBJECT);
110QGST_DEFINE_CAST_TRAITS(GstPipeline, PIPELINE);
111QGST_DEFINE_CAST_TRAITS(GstBaseSink, BASE_SINK);
112QGST_DEFINE_CAST_TRAITS(GstBaseSrc, BASE_SRC);
113
115
116#if QT_CONFIG(gstreamer_app)
117QGST_DEFINE_CAST_TRAITS(GstAppSink, APP_SINK);
118QGST_DEFINE_CAST_TRAITS(GstAppSrc, APP_SRC);
119#endif
120
121template <>
122struct GstObjectTraits<GObject>
123{
124 using Type = GObject;
125 template <typename U>
126 static bool isObjectOfType(U *arg)
127 {
128 return G_IS_OBJECT(arg);
129 }
130 template <typename U>
131 static Type *cast(U *arg)
132 {
133 return G_OBJECT(arg);
134 }
135 template <typename U>
137 {
138 return G_OBJECT(arg);
139 }
140};
141
142#undef QGST_DEFINE_CAST_TRAITS
143#undef QGST_DEFINE_CAST_TRAITS_FOR_INTERFACE
144
145} // namespace QGstImpl
146
147template <typename DestinationType, typename SourceType>
148bool qIsGstObjectOfType(SourceType *arg)
149{
151 return arg && Traits::isObjectOfType(arg);
152}
153
154template <typename DestinationType, typename SourceType>
155DestinationType *qGstSafeCast(SourceType *arg)
156{
158 if (arg && Traits::isObjectOfType(arg))
159 return Traits::cast(arg);
160 return nullptr;
161}
162
163template <typename DestinationType, typename SourceType>
164DestinationType *qGstCheckedCast(SourceType *arg)
165{
167 if (arg)
168 Q_ASSERT(Traits::isObjectOfType(arg));
169 return Traits::cast(arg);
170}
171
172class QSize;
173class QGstStructure;
174class QGstCaps;
176class QCameraFormat;
177
178template <typename T> struct QGRange
179{
182};
183
185{
186 using QUniqueGStringHandle::QUniqueGStringHandle;
187
189 QString toQString() const { return QString::fromUtf8(get()); }
190};
191
193{
194public:
195 explicit QGValue(const GValue *v);
196 const GValue *value;
197
198 bool isNull() const;
199
200 std::optional<bool> toBool() const;
201 std::optional<int> toInt() const;
202 std::optional<int> toInt64() const;
203 template<typename T>
204 T *getPointer() const
205 {
206 return value ? static_cast<T *>(g_value_get_pointer(value)) : nullptr;
207 }
208
209 const char *toString() const;
210 std::optional<float> getFraction() const;
211 std::optional<QGRange<float>> getFractionRange() const;
212 std::optional<QGRange<int>> toIntRange() const;
213
215 QGstCaps toCaps() const;
216
217 bool isList() const;
218 int listSize() const;
219 QGValue at(int index) const;
220
221 QList<QAudioFormat::SampleFormat> getSampleFormats() const;
222};
223
225
226template <typename RefcountedObject>
228
229template <typename GstType>
231{
232 using Adaptor = QGstRefcountingAdaptor<GstType>;
233
234 GstType *m_object = nullptr;
235
236public:
238
239 constexpr QGstObjectWrapper() = default;
240
241 explicit QGstObjectWrapper(GstType *object, RefMode mode) : m_object(object)
242 {
243 if (m_object && mode == NeedsRef)
244 Adaptor::ref(m_object);
245 }
246
247 QGstObjectWrapper(const QGstObjectWrapper &other) : m_object(other.m_object)
248 {
249 if (m_object)
250 Adaptor::ref(m_object);
251 }
252
254 {
255 if (m_object)
256 Adaptor::unref(m_object);
257 }
258
260 : m_object(std::exchange(other.m_object, nullptr))
261 {
262 }
263
265 operator=(const QGstObjectWrapper &other) // NOLINT: bugprone-unhandled-self-assign
266 {
267 if (m_object != other.m_object) {
268 GstType *originalObject = m_object;
269
270 m_object = other.m_object;
271 if (m_object)
272 Adaptor::ref(m_object);
273 if (originalObject)
274 Adaptor::unref(originalObject);
275 }
276 return *this;
277 }
278
280 {
281 if (this != &other) {
282 GstType *originalObject = m_object;
283 m_object = std::exchange(other.m_object, nullptr);
284
285 if (originalObject)
286 Adaptor::unref(originalObject);
287 }
288 return *this;
289 }
290
292 {
293 return a.m_object == b.m_object;
294 }
296 {
297 return a.m_object != b.m_object;
298 }
299
300 explicit operator bool() const { return bool(m_object); }
301 bool isNull() const { return !m_object; }
302 GstType *release() { return std::exchange(m_object, nullptr); }
303
304protected:
305 GstType *get() const { return m_object; }
306};
307
308} // namespace QGstPointerImpl
309
311
313{
314public:
315 const GstStructure *structure = nullptr;
316 QGstStructure() = default;
317 QGstStructure(const GstStructure *s);
318 void free();
319
320 bool isNull() const;
321
322 QByteArrayView name() const;
323 QGValue operator[](const char *name) const;
324
325 QSize resolution() const;
327 QGRange<float> frameRateRange() const;
329 std::optional<Fraction> pixelAspectRatio() const;
330 QSize nativeSize() const;
331
332 QGstStructure copy() const;
333};
334
335template <>
337{
338 static void ref(GstCaps *arg) noexcept { gst_caps_ref(arg); }
339 static void unref(GstCaps *arg) noexcept { gst_caps_unref(arg); }
340};
341
343{
345
346public:
347 using BaseClass::BaseClass;
348 QGstCaps(const QGstCaps &) = default;
349 QGstCaps(QGstCaps &&) noexcept = default;
350 QGstCaps &operator=(const QGstCaps &) = default;
351 QGstCaps &operator=(QGstCaps &&) noexcept = default;
352
354
355 int size() const;
356 QGstStructure at(int index) const;
357 GstCaps *caps() const;
358
360 std::optional<std::pair<QVideoFrameFormat, GstVideoInfo>> formatAndVideoInfo() const;
361
362 void addPixelFormats(const QList<QVideoFrameFormat::PixelFormat> &formats, const char *modifier = nullptr);
363 void setResolution(QSize);
364
365 static QGstCaps create();
366
368
369 QGstCaps copy() const;
370};
371
372template <>
374{
375 static void ref(GstObject *arg) noexcept { gst_object_ref_sink(arg); }
376 static void unref(GstObject *arg) noexcept { gst_object_unref(arg); }
377};
378
380
382{
384
385public:
386 using BaseClass::BaseClass;
387 QGstObject(const QGstObject &) = default;
388 QGstObject(QGstObject &&) noexcept = default;
389
390 QGstObject &operator=(const QGstObject &) = default;
391 QGstObject &operator=(QGstObject &&) noexcept = default;
392
393 void set(const char *property, const char *str);
394 void set(const char *property, bool b);
395 void set(const char *property, uint i);
396 void set(const char *property, int i);
397 void set(const char *property, qint64 i);
398 void set(const char *property, quint64 i);
399 void set(const char *property, double d);
400 void set(const char *property, const QGstObject &o);
401 void set(const char *property, const QGstCaps &c);
402
403 QGString getString(const char *property) const;
404 QGstStructure getStructure(const char *property) const;
405 bool getBool(const char *property) const;
406 uint getUInt(const char *property) const;
407 int getInt(const char *property) const;
408 quint64 getUInt64(const char *property) const;
409 qint64 getInt64(const char *property) const;
410 float getFloat(const char *property) const;
411 double getDouble(const char *property) const;
412 QGstObject getObject(const char *property) const;
413
414 QGObjectHandlerConnection connect(const char *name, GCallback callback, gpointer userData);
415 void disconnect(gulong handlerId);
416
417 GType type() const;
418 const char *typeName() const;
419 GstObject *object() const;
420 const char *name() const;
421};
422
424{
425public:
426 QGObjectHandlerConnection(QGstObject object, gulong handler);
427
433
434 void disconnect();
435
436private:
437 static constexpr gulong invalidHandlerId = std::numeric_limits<gulong>::max();
438
440 gulong handlerId = invalidHandlerId;
441};
442
443// disconnects in dtor
462
463class QGstElement;
464
465class QGstPad : public QGstObject
466{
467public:
469 QGstPad(const QGstPad &) = default;
470 QGstPad(QGstPad &&) noexcept = default;
471
473 explicit QGstPad(GstPad *pad, RefMode mode);
474
475 QGstPad &operator=(const QGstPad &) = default;
476 QGstPad &operator=(QGstPad &&) noexcept = default;
477
478 QGstCaps currentCaps() const;
479 QGstCaps queryCaps() const;
480
481 bool isLinked() const;
482 bool link(const QGstPad &sink) const;
483 bool unlink(const QGstPad &sink) const;
484 bool unlinkPeer() const;
485 QGstPad peer() const;
486 QGstElement parent() const;
487
488 GstPad *pad() const;
489
490 GstEvent *stickyEvent(GstEventType type);
491 bool sendEvent(GstEvent *event);
492
493 template<auto Member, typename T>
494 void addProbe(T *instance, GstPadProbeType type) {
495 auto callback = [](GstPad *pad, GstPadProbeInfo *info, gpointer userData) {
496 return (static_cast<T *>(userData)->*Member)(QGstPad(pad, NeedsRef), info);
497 };
498
499 gst_pad_add_probe(pad(), type, callback, instance, nullptr);
500 }
501
502 template <typename Functor>
504 {
505 struct CallbackData {
506 QSemaphore waitDone;
507 Functor work;
508 };
509
510 CallbackData cd{
511 .waitDone = QSemaphore{},
512 .work = std::forward<Functor>(work),
513 };
514
515 auto callback= [](GstPad *, GstPadProbeInfo *, gpointer p) {
516 auto cd = reinterpret_cast<CallbackData*>(p);
517 cd->work();
518 cd->waitDone.release();
519 return GST_PAD_PROBE_REMOVE;
520 };
521
522 gst_pad_add_probe(pad(), GST_PAD_PROBE_TYPE_IDLE, callback, &cd, nullptr);
523 cd.waitDone.acquire();
524 }
525
526 template<auto Member, typename T>
527 void addEosProbe(T *instance) {
528 auto callback = [](GstPad *, GstPadProbeInfo *info, gpointer userData) {
529 if (GST_EVENT_TYPE(GST_PAD_PROBE_INFO_DATA(info)) != GST_EVENT_EOS)
530 return GST_PAD_PROBE_PASS;
531 (static_cast<T *>(userData)->*Member)();
532 return GST_PAD_PROBE_REMOVE;
533 };
534
535 gst_pad_add_probe(pad(), GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, callback, instance, nullptr);
536 }
537};
538
539class QGstClock : public QGstObject
540{
541public:
542 QGstClock() = default;
543 explicit QGstClock(const QGstObject &o);
544 explicit QGstClock(GstClock *clock, RefMode mode);
545
546 GstClock *clock() const;
547 GstClockTime time() const;
548};
549
550class QGstPipeline;
551
553{
554public:
556
557 QGstElement(const QGstElement &) = default;
558 QGstElement(QGstElement &&) noexcept = default;
559 QGstElement &operator=(const QGstElement &) = default;
560 QGstElement &operator=(QGstElement &&) noexcept = default;
561
562 explicit QGstElement(GstElement *element, RefMode mode);
563 static QGstElement createFromFactory(const char *factory, const char *name = nullptr);
564 static QGstElement createFromFactory(GstElementFactory *, const char *name = nullptr);
565 static QGstElement createFromFactory(const QGstElementFactoryHandle &,
566 const char *name = nullptr);
567 static QGstElement createFromDevice(const QGstDeviceHandle &, const char *name = nullptr);
568 static QGstElement createFromDevice(GstDevice *, const char *name = nullptr);
569 static QGstElement createFromPipelineDescription(const char *);
570 static QGstElement createFromPipelineDescription(const QByteArray &);
571
572 QGstPad staticPad(const char *name) const;
573 QGstPad src() const;
574 QGstPad sink() const;
575 QGstPad getRequestPad(const char *name) const;
576 void releaseRequestPad(const QGstPad &pad) const;
577
578 GstState state(std::chrono::nanoseconds timeout = std::chrono::seconds(0)) const;
579 GstStateChangeReturn setState(GstState state);
580 bool setStateSync(GstState state, std::chrono::nanoseconds timeout = std::chrono::seconds(1));
581 bool syncStateWithParent();
582 bool finishStateChange(std::chrono::nanoseconds timeout = std::chrono::seconds(5));
583
584 void lockState(bool locked);
585 bool isStateLocked() const;
586
587 void sendEvent(GstEvent *event) const;
588 void sendEos() const;
589
590 template <auto Member, typename T>
591 QGObjectHandlerConnection onPadAdded(T *instance)
592 {
593 struct Impl
594 {
595 static void callback(GstElement *e, GstPad *pad, gpointer userData)
596 {
597 (static_cast<T *>(userData)->*Member)(QGstElement(e, NeedsRef),
598 QGstPad(pad, NeedsRef));
599 };
600 };
601
602 return connect("pad-added", G_CALLBACK(Impl::callback), instance);
603 }
604 template <auto Member, typename T>
606 {
607 struct Impl
608 {
609 static void callback(GstElement *e, GstPad *pad, gpointer userData)
610 {
611 (static_cast<T *>(userData)->*Member)(QGstElement(e, NeedsRef),
612 QGstPad(pad, NeedsRef));
613 };
614 };
615
616 return connect("pad-removed", G_CALLBACK(Impl::callback), instance);
617 }
618 template <auto Member, typename T>
620 {
621 struct Impl
622 {
623 static void callback(GstElement *e, gpointer userData)
624 {
625 (static_cast<T *>(userData)->*Member)(QGstElement(e, NeedsRef));
626 };
627 };
628
629 return connect("no-more-pads", G_CALLBACK(Impl::callback), instance);
630 }
631
632 GstClockTime baseTime() const;
633 void setBaseTime(GstClockTime time) const;
634
635 GstElement *element() const;
636
637 QGstElement getParent() const;
638 QGstPipeline getPipeline() const;
639 void dumpPipelineGraph(const char *filename) const;
640};
641
642template <typename... Ts>
643std::enable_if_t<(std::is_base_of_v<QGstElement, Ts> && ...), void>
644qLinkGstElements(const Ts &...ts)
645{
646 bool link_success = [&] {
647 if constexpr (sizeof...(Ts) == 2)
648 return gst_element_link(ts.element()...);
649 else
650 return gst_element_link_many(ts.element()..., nullptr);
651 }();
652
653 if (Q_UNLIKELY(!link_success)) {
654 qWarning() << "qLinkGstElements: could not link elements: "
655 << std::initializer_list<const char *>{
656 (GST_ELEMENT_NAME(ts.element()))...,
657 };
658 }
659}
660
661template <typename... Ts>
662std::enable_if_t<(std::is_base_of_v<QGstElement, Ts> && ...), void>
663qUnlinkGstElements(const Ts &...ts)
664{
665 if constexpr (sizeof...(Ts) == 2)
666 gst_element_unlink(ts.element()...);
667 else
668 gst_element_unlink_many(ts.element()..., nullptr);
669}
670
671class QGstBin : public QGstElement
672{
673public:
675 QGstBin(const QGstBin &) = default;
676 QGstBin(QGstBin &&) noexcept = default;
677 QGstBin &operator=(const QGstBin &) = default;
678 QGstBin &operator=(QGstBin &&) noexcept = default;
679
680 explicit QGstBin(GstBin *bin, RefMode mode = NeedsRef);
681 static QGstBin create(const char *name);
682 static QGstBin createFromFactory(const char *factory, const char *name);
683 static QGstBin createFromPipelineDescription(const QByteArray &pipelineDescription,
684 const char *name = nullptr,
685 bool ghostUnlinkedPads = false);
686 static QGstBin createFromPipelineDescription(const char *pipelineDescription,
687 const char *name = nullptr,
688 bool ghostUnlinkedPads = false);
689
690 template <typename... Ts>
691 std::enable_if_t<(std::is_base_of_v<QGstElement, Ts> && ...), void> add(const Ts &...ts)
692 {
693 if constexpr (sizeof...(Ts) == 1)
694 gst_bin_add(bin(), ts.element()...);
695 else
696 gst_bin_add_many(bin(), ts.element()..., nullptr);
697 }
698
699 template <typename... Ts>
700 std::enable_if_t<(std::is_base_of_v<QGstElement, Ts> && ...), void> remove(const Ts &...ts)
701 {
702 if constexpr (sizeof...(Ts) == 1)
703 gst_bin_remove(bin(), ts.element()...);
704 else
705 gst_bin_remove_many(bin(), ts.element()..., nullptr);
706 }
707
708 template <typename... Ts>
709 std::enable_if_t<(std::is_base_of_v<QGstElement, Ts> && ...), void>
711 {
712 bool stateChangeSuccessful = (ts.setStateSync(GST_STATE_NULL) && ...);
713 Q_ASSERT(stateChangeSuccessful);
714 remove(ts...);
715 }
716
717 GstBin *bin() const;
718
719 void addGhostPad(const QGstElement &child, const char *name);
720 void addGhostPad(const char *name, const QGstPad &pad);
721
722 bool syncChildrenState();
723
724 void dumpGraph(const char *fileNamePrefix);
725
726 QGstElement findByName(const char *);
727};
728
730{
731public:
733
734 explicit QGstBaseSink(GstBaseSink *, RefMode);
735
736 QGstBaseSink(const QGstBaseSink &) = default;
737 QGstBaseSink(QGstBaseSink &&) noexcept = default;
738 QGstBaseSink &operator=(const QGstBaseSink &) = default;
739 QGstBaseSink &operator=(QGstBaseSink &&) noexcept = default;
740
741 void setSync(bool);
742
743 GstBaseSink *baseSink() const;
744};
745
747{
748public:
750
751 explicit QGstBaseSrc(GstBaseSrc *, RefMode);
752
753 QGstBaseSrc(const QGstBaseSrc &) = default;
754 QGstBaseSrc(QGstBaseSrc &&) noexcept = default;
755 QGstBaseSrc &operator=(const QGstBaseSrc &) = default;
756 QGstBaseSrc &operator=(QGstBaseSrc &&) noexcept = default;
757
758 GstBaseSrc *baseSrc() const;
759};
760
761#if QT_CONFIG(gstreamer_app)
762class QGstAppSink : public QGstBaseSink
763{
764public:
766
767 explicit QGstAppSink(GstAppSink *, RefMode);
768
769 QGstAppSink(const QGstAppSink &) = default;
770 QGstAppSink(QGstAppSink &&) noexcept = default;
771 QGstAppSink &operator=(const QGstAppSink &) = default;
772 QGstAppSink &operator=(QGstAppSink &&) noexcept = default;
773
774 static QGstAppSink create(const char *name);
775
776 GstAppSink *appSink() const;
777
778 void setMaxBuffers(int);
779# if GST_CHECK_VERSION(1, 24, 0)
780 void setMaxBufferTime(std::chrono::nanoseconds);
781# endif
782
783 void setCaps(const QGstCaps &caps);
784 void setCallbacks(GstAppSinkCallbacks &callbacks, gpointer user_data, GDestroyNotify notify);
785
786 QGstSampleHandle pullSample();
787};
788
789class QGstAppSrc : public QGstBaseSrc
790{
791public:
793
794 explicit QGstAppSrc(GstAppSrc *, RefMode);
795
796 QGstAppSrc(const QGstAppSrc &) = default;
797 QGstAppSrc(QGstAppSrc &&) noexcept = default;
798 QGstAppSrc &operator=(const QGstAppSrc &) = default;
799 QGstAppSrc &operator=(QGstAppSrc &&) noexcept = default;
800
801 static QGstAppSrc create(const char *name);
802
803 GstAppSrc *appSrc() const;
804
805 void setCallbacks(GstAppSrcCallbacks &callbacks, gpointer user_data, GDestroyNotify notify);
806
807 GstFlowReturn pushBuffer(GstBuffer *); // take ownership
808};
809
810#endif
811
812inline GstClockTime qGstClockTimeFromChrono(std::chrono::nanoseconds ns)
813{
814 return ns.count();
815}
816
817inline QString errorMessageCannotFindElement(std::string_view element)
818{
819 return QStringLiteral("Could not find the %1 GStreamer element")
820 .arg(QLatin1StringView(element));
821}
822
824
825#endif
\inmodule QtCore
Definition qbytearray.h:57
The QCameraFormat class describes a video format supported by a camera device. \inmodule QtMultimedia...
QGObjectHandlerConnection & operator=(const QGObjectHandlerConnection &)=default
QGObjectHandlerConnection & operator=(QGObjectHandlerConnection &&)=default
QGObjectHandlerConnection()=default
QGObjectHandlerConnection(const QGObjectHandlerConnection &)=default
QGObjectHandlerConnection(QGObjectHandlerConnection &&)=default
QGObjectHandlerScopedConnection(const QGObjectHandlerScopedConnection &)=delete
QGObjectHandlerScopedConnection & operator=(const QGObjectHandlerScopedConnection &)=delete
QGObjectHandlerScopedConnection(QGObjectHandlerScopedConnection &&)=default
QGObjectHandlerScopedConnection & operator=(QGObjectHandlerScopedConnection &&)=default
std::optional< int > toInt64() const
Definition qgst.cpp:94
std::optional< QGRange< int > > toIntRange() const
Definition qgst.cpp:123
std::optional< int > toInt() const
Definition qgst.cpp:87
QList< QAudioFormat::SampleFormat > getSampleFormats() const
int listSize() const
Definition qgst.cpp:149
bool isList() const
Definition qgst.cpp:144
T * getPointer() const
Definition qgst_p.h:204
std::optional< QGRange< float > > getFractionRange() const
Definition qgst.cpp:114
const char * toString() const
Definition qgst.cpp:101
QGstStructure toStructure() const
Definition qgst.cpp:130
const GValue * value
Definition qgst_p.h:196
std::optional< float > getFraction() const
Definition qgst.cpp:106
bool isNull() const
Definition qgst.cpp:75
QGstCaps toCaps() const
Definition qgst.cpp:137
std::optional< bool > toBool() const
Definition qgst.cpp:80
QGValue(const GValue *v)
Definition qgst.cpp:73
QGstBaseSink(GstBaseSink *, RefMode)
Definition qgst.cpp:1151
QGstBaseSink(const QGstBaseSink &)=default
QGstBaseSink(QGstBaseSink &&) noexcept=default
QGstBaseSrc(QGstBaseSrc &&) noexcept=default
QGstBaseSrc(const QGstBaseSrc &)=default
QGstBaseSrc(GstBaseSrc *, RefMode)
Definition qgst.cpp:1171
QGstBin(QGstBin &&) noexcept=default
std::enable_if_t<(std::is_base_of_v< QGstElement, Ts > &&...), void remove)(const Ts &...ts)
Definition qgst_p.h:700
QGstBin(const QGstBin &)=default
std::enable_if_t<(std::is_base_of_v< QGstElement, Ts > &&...), void stopAndRemoveElements)(Ts... ts)
Definition qgst_p.h:710
void addPixelFormats(const QList< QVideoFrameFormat::PixelFormat > &formats, const char *modifier=nullptr)
Definition qgst.cpp:430
MemoryFormat memoryFormat() const
Definition qgst.cpp:506
std::optional< std::pair< QVideoFrameFormat, GstVideoInfo > > formatAndVideoInfo() const
Definition qgst.cpp:329
int size() const
Definition qgst.cpp:516
static QGstCaps fromCameraFormat(const QCameraFormat &format)
Definition qgst.cpp:477
static QGstCaps create()
Definition qgst.cpp:531
GstCaps * caps() const
Definition qgst.cpp:526
void setResolution(QSize)
Definition qgst.cpp:463
MemoryFormat
Definition qgst_p.h:353
@ DMABuf
Definition qgst_p.h:353
@ CpuMemory
Definition qgst_p.h:353
@ GLTexture
Definition qgst_p.h:353
QGstCaps(const QGstCaps &)=default
QGstCaps copy() const
Definition qgst.cpp:498
QGstCaps(QGstCaps &&) noexcept=default
QGstClock()=default
QGObjectHandlerConnection onPadRemoved(T *instance)
Definition qgst_p.h:605
QGstElement(const QGstElement &)=default
QGstElement(QGstElement &&) noexcept=default
QGObjectHandlerConnection onNoMorePads(T *instance)
Definition qgst_p.h:619
QGstStructure getStructure(const char *property) const
Definition qgst.cpp:590
QGObjectHandlerConnection connect(const char *name, GCallback callback, gpointer userData)
Definition qgst.cpp:653
double getDouble(const char *property) const
Definition qgst.cpp:639
int getInt(const char *property) const
Definition qgst.cpp:611
QGString getString(const char *property) const
Definition qgst.cpp:583
const char * typeName() const
Definition qgst.cpp:672
QGstObject getObject(const char *property) const
Definition qgst.cpp:646
bool getBool(const char *property) const
Definition qgst.cpp:597
QGstObject(const QGstObject &)=default
quint64 getUInt64(const char *property) const
Definition qgst.cpp:618
qint64 getInt64(const char *property) const
Definition qgst.cpp:625
float getFloat(const char *property) const
Definition qgst.cpp:632
QGstObject(QGstObject &&) noexcept=default
uint getUInt(const char *property) const
Definition qgst.cpp:604
GstObject * object() const
Definition qgst.cpp:677
QGstPad(const QGstPad &)=default
void doInIdleProbe(Functor &&work)
Definition qgst_p.h:503
QGstPad(QGstPad &&) noexcept=default
void addEosProbe(T *instance)
Definition qgst_p.h:527
QGstObjectWrapper(const QGstObjectWrapper &other)
Definition qgst_p.h:247
friend bool operator==(const QGstObjectWrapper &a, const QGstObjectWrapper &b)
Definition qgst_p.h:291
QGstObjectWrapper & operator=(const QGstObjectWrapper &other)
Definition qgst_p.h:265
QGstObjectWrapper & operator=(QGstObjectWrapper &&other) noexcept
Definition qgst_p.h:279
friend bool operator!=(const QGstObjectWrapper &a, const QGstObjectWrapper &b)
Definition qgst_p.h:295
QGstObjectWrapper(GstType *object, RefMode mode)
Definition qgst_p.h:241
constexpr QGstObjectWrapper()=default
QGstObjectWrapper(QGstObjectWrapper &&other) noexcept
Definition qgst_p.h:259
QSize resolution() const
Definition qgst.cpp:190
QSize nativeSize() const
Definition qgst.cpp:313
QGstStructure copy() const
Definition qgst.cpp:185
QGstreamerMessage getMessage()
Definition qgst.cpp:279
const GstStructure * structure
Definition qgst_p.h:315
QGRange< float > frameRateRange() const
Definition qgst.cpp:227
void free()
Definition qgst.cpp:163
std::optional< Fraction > pixelAspectRatio() const
Definition qgst.cpp:286
QByteArrayView name() const
Definition qgst.cpp:175
QGstStructure()=default
QGValue operator[](const char *name) const
Definition qgst.cpp:180
QVideoFrameFormat::PixelFormat pixelFormat() const
Definition qgst.cpp:204
bool isNull() const
Definition qgst.cpp:170
\inmodule QtCore
Definition qsemaphore.h:18
void release(int n=1)
Releases n resources guarded by the semaphore.
\inmodule QtCore
Definition qsize.h:25
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:6018
Type get() const noexcept
PixelFormat
Enumerates video data types.
QString str
[2]
else opt state
[0]
EGLint EGLint * formats
Combined button and popup list for selecting options.
std::optional< qint64 > baseTime
#define Q_UNLIKELY(x)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void * user_data
DBusConnection * connection
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
std::enable_if_t<(std::is_base_of_v< QGstElement, Ts > &&...), void qLinkGstElements)(const Ts &...ts)
Definition qgst_p.h:644
DestinationType * qGstCheckedCast(SourceType *arg)
Definition qgst_p.h:164
#define QGST_DEFINE_CAST_TRAITS(ClassName, MACRO_LABEL)
Definition qgst_p.h:59
GstClockTime qGstClockTimeFromChrono(std::chrono::nanoseconds ns)
Definition qgst_p.h:812
QString errorMessageCannotFindElement(std::string_view element)
Definition qgst_p.h:817
bool qIsGstObjectOfType(SourceType *arg)
Definition qgst_p.h:148
DestinationType * qGstSafeCast(SourceType *arg)
Definition qgst_p.h:155
std::enable_if_t<(std::is_base_of_v< QGstElement, Ts > &&...), void qUnlinkGstElements)(const Ts &...ts)
Definition qgst_p.h:663
#define QGST_DEFINE_CAST_TRAITS_FOR_INTERFACE(ClassName, MACRO_LABEL)
Definition qgst_p.h:82
#define qWarning
Definition qlogging.h:166
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLenum mode
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint index
[2]
GLuint object
[3]
GLbitfield GLuint64 timeout
[4]
GLenum src
GLenum type
GLuint name
GLint GLsizei GLsizei GLenum format
struct _cl_event * event
GLdouble s
[6]
Definition qopenglext.h:235
const GLubyte * c
GLsizei GLenum GLboolean sink
GLfloat GLfloat p
[1]
static void add(QPainterPath &path, const QWingedEdge &list, int edge, QPathEdge::Traversal traversal)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
SSL_CTX int void * arg
PromiseCallbacks callbacks
Definition qstdweb.cpp:275
#define QStringLiteral(str)
unsigned long long quint64
Definition qtypes.h:61
unsigned int uint
Definition qtypes.h:34
long long qint64
Definition qtypes.h:60
const char property[13]
Definition qwizard.cpp:101
#define explicit
QFuture< QSet< QChar > > set
[10]
settings remove("monkey")
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection)
myObject disconnect()
[26]
QSharedPointer< T > other(t)
[5]
QItemEditorFactory * factory
QLayoutItem * child
[0]
QAction * at
QHostInfo info
[0]
view create()
T min
Definition qgst_p.h:180
T max
Definition qgst_p.h:181
QString toQString() const
Definition qgst_p.h:189
QLatin1StringView asStringView() const
Definition qgst_p.h:188
static Type * cast(U *arg)
Definition qgst_p.h:131
static bool isObjectOfType(U *arg)
Definition qgst_p.h:126
static Type * checked_cast(U *arg)
Definition qgst_p.h:136
static void unref(GstCaps *arg) noexcept
Definition qgst_p.h:339
static void ref(GstCaps *arg) noexcept
Definition qgst_p.h:338
static void unref(GstObject *arg) noexcept
Definition qgst_p.h:376
static void ref(GstObject *arg) noexcept
Definition qgst_p.h:375