17#define ST_SINK(s) QGstSubtitleSink *sink(reinterpret_cast<QGstSubtitleSink *>(s))
24 g_object_new(QGstSubtitleSink::get_type(),
nullptr));
25 g_object_set(gstSink,
"async",
false,
nullptr);
30GType QGstSubtitleSink::get_type()
32 static const GTypeInfo
info =
46 static const GType
type = []() {
47 const auto result = g_type_register_static(
48 GST_TYPE_BASE_SINK,
"QGstSubtitleSink", &
info, GTypeFlags(0));
52 gst_element_register(
nullptr,
"qtsubtitlesink", GST_RANK_PRIMARY,
result);
60void QGstSubtitleSink::class_init(gpointer g_class, gpointer class_data)
66 GstBaseSinkClass *base_sink_class =
reinterpret_cast<GstBaseSinkClass *
>(g_class);
67 base_sink_class->render = QGstSubtitleSink::render;
68 base_sink_class->get_caps = QGstSubtitleSink::get_caps;
69 base_sink_class->set_caps = QGstSubtitleSink::set_caps;
70 base_sink_class->propose_allocation = QGstSubtitleSink::propose_allocation;
71 base_sink_class->wait_event = QGstSubtitleSink::wait_event;
73 GstElementClass *element_class =
reinterpret_cast<GstElementClass *
>(g_class);
74 element_class->change_state = QGstSubtitleSink::change_state;
75 gst_element_class_set_metadata(element_class,
76 "Qt built-in subtitle sink",
78 "Qt default built-in subtitle sink",
81 GObjectClass *object_class =
reinterpret_cast<GObjectClass *
>(g_class);
82 object_class->finalize = QGstSubtitleSink::finalize;
85void QGstSubtitleSink::base_init(gpointer g_class)
87 static GstStaticPadTemplate sink_pad_template = GST_STATIC_PAD_TEMPLATE(
88 "sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS(
"ANY"));
90 gst_element_class_add_pad_template(
91 GST_ELEMENT_CLASS(g_class), gst_static_pad_template_get(&sink_pad_template));
94void QGstSubtitleSink::instance_init(GTypeInstance *instance, gpointer g_class)
104void QGstSubtitleSink::finalize(GObject *
object)
110GstStateChangeReturn QGstSubtitleSink::change_state(GstElement *element, GstStateChange transition)
115GstCaps *QGstSubtitleSink::get_caps(GstBaseSink *
base, GstCaps *
filter)
120gboolean QGstSubtitleSink::set_caps(GstBaseSink *
base, GstCaps *caps)
126gboolean QGstSubtitleSink::propose_allocation(GstBaseSink *
base, GstQuery *
query)
131GstFlowReturn QGstSubtitleSink::wait_event(GstBaseSink *
base, GstEvent *
event)
135 if (
event->type == GST_EVENT_GAP) {
142GstFlowReturn QGstSubtitleSink::render(GstBaseSink *
base, GstBuffer *
buffer)
145 GstMemory *mem = gst_buffer_get_memory(
buffer, 0);
148 if (gst_memory_map(mem, &
info, GST_MAP_READ))
150 gst_memory_unmap(mem, &
info);
152 sink->sink->setSubtitleText(subtitle);
QByteArray toString() const
static QGstSubtitleSink * createSink(QGstreamerVideoSink *sink)
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Combined button and popup list for selecting options.
static thread_local QGstreamerVideoSink * gst_current_sink
static QT_BEGIN_NAMESPACE GstBaseSinkClass * gst_sink_parent_class
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLsizei GLenum GLboolean sink
QFileInfo info(fileName)
[8]