16#define ST_SINK(s) QGstSubtitleSink *sink(reinterpret_cast<QGstSubtitleSink *>(s))
23 g_object_new(QGstSubtitleSink::get_type(),
nullptr));
24 g_object_set(gstSink,
"async",
false,
nullptr);
29GType QGstSubtitleSink::get_type()
31 static const GTypeInfo
info =
45 static const GType
type = []() {
46 const auto result = g_type_register_static(
47 GST_TYPE_BASE_SINK,
"QGstSubtitleSink", &
info, GTypeFlags(0));
51 gst_element_register(
nullptr,
"qtsubtitlesink", GST_RANK_PRIMARY,
result);
59void QGstSubtitleSink::class_init(gpointer g_class, gpointer class_data)
65 GstBaseSinkClass *base_sink_class =
reinterpret_cast<GstBaseSinkClass *
>(g_class);
66 base_sink_class->render = QGstSubtitleSink::render;
67 base_sink_class->get_caps = QGstSubtitleSink::get_caps;
68 base_sink_class->set_caps = QGstSubtitleSink::set_caps;
69 base_sink_class->propose_allocation = QGstSubtitleSink::propose_allocation;
70 base_sink_class->wait_event = QGstSubtitleSink::wait_event;
72 GstElementClass *element_class =
reinterpret_cast<GstElementClass *
>(g_class);
73 element_class->change_state = QGstSubtitleSink::change_state;
74 gst_element_class_set_metadata(element_class,
75 "Qt built-in subtitle sink",
77 "Qt default built-in subtitle sink",
80 GObjectClass *object_class =
reinterpret_cast<GObjectClass *
>(g_class);
81 object_class->finalize = QGstSubtitleSink::finalize;
84void QGstSubtitleSink::base_init(gpointer g_class)
86 static GstStaticPadTemplate sink_pad_template = GST_STATIC_PAD_TEMPLATE(
87 "sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS(
"ANY"));
89 gst_element_class_add_pad_template(
90 GST_ELEMENT_CLASS(g_class), gst_static_pad_template_get(&sink_pad_template));
93void QGstSubtitleSink::instance_init(GTypeInstance *instance, gpointer g_class)
103void QGstSubtitleSink::finalize(GObject *
object)
109GstStateChangeReturn QGstSubtitleSink::change_state(GstElement *element, GstStateChange transition)
114GstCaps *QGstSubtitleSink::get_caps(GstBaseSink *
base, GstCaps *
filter)
119gboolean QGstSubtitleSink::set_caps(GstBaseSink *
base, GstCaps *caps)
121 qDebug() <<
"set_caps:" << caps;
125gboolean QGstSubtitleSink::propose_allocation(GstBaseSink *
base, GstQuery *
query)
130GstFlowReturn QGstSubtitleSink::wait_event(GstBaseSink *
base, GstEvent *
event)
134 if (
event->type == GST_EVENT_GAP) {
141GstFlowReturn QGstSubtitleSink::render(GstBaseSink *
base, GstBuffer *
buffer)
144 GstMemory *mem = gst_buffer_get_memory(
buffer, 0);
147 if (gst_memory_map(mem, &
info, GST_MAP_READ))
149 gst_memory_unmap(mem, &
info);
151 sink->sink->setSubtitleText(subtitle);
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