1 /* thumbnailsink.c generated by valac, the Vala compiler
2 * generated from thumbnailsink.vala, do not modify */
6 #include <glib-object.h>
7 #include <gst/base/gstbasesink.h>
11 #include <gdk-pixbuf/gdk-pixdata.h>
14 #define TYPE_THUMBNAIL_SINK (thumbnail_sink_get_type ())
15 #define THUMBNAIL_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_THUMBNAIL_SINK, ThumbnailSink))
16 #define THUMBNAIL_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_THUMBNAIL_SINK, ThumbnailSinkClass))
17 #define IS_THUMBNAIL_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_THUMBNAIL_SINK))
18 #define IS_THUMBNAIL_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_THUMBNAIL_SINK))
19 #define THUMBNAIL_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_THUMBNAIL_SINK, ThumbnailSinkClass))
21 typedef struct _ThumbnailSink ThumbnailSink;
22 typedef struct _ThumbnailSinkClass ThumbnailSinkClass;
23 typedef struct _ThumbnailSinkPrivate ThumbnailSinkPrivate;
24 #define _gst_structure_free0(var) ((var == NULL) ? NULL : (var = (gst_structure_free (var), NULL)))
25 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
26 #define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
28 struct _ThumbnailSink {
29 GstBaseSink parent_instance;
30 ThumbnailSinkPrivate * priv;
33 struct _ThumbnailSinkClass {
34 GstBaseSinkClass parent_class;
37 struct _ThumbnailSinkPrivate {
43 static gpointer thumbnail_sink_parent_class = NULL;
45 GType thumbnail_sink_get_type (void);
46 #define THUMBNAIL_SINK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_THUMBNAIL_SINK, ThumbnailSinkPrivate))
48 THUMBNAIL_SINK_DUMMY_PROPERTY
50 #define THUMBNAIL_SINK_caps_string "video/x-raw-rgb,bpp = (int) 32, depth = (int) 32,\n" \
51 " endianness = (int) BIG_ENDIAN,\n" \
52 " blue_mask = (int) 0xFF000000,\n" \
53 " green_mask = (int) 0x00FF0000,\n" \
54 " red_mask = (int) 0x0000FF00,\n" \
55 " width = (int) [ 1, max ],\n" \
56 " height = (int) [ 1, max ],\n" \
57 " framerate = (fraction) [ 0, max ]"
58 ThumbnailSink* thumbnail_sink_new (void);
59 ThumbnailSink* thumbnail_sink_construct (GType object_type);
60 static gboolean thumbnail_sink_real_set_caps (GstBaseSink* base, GstCaps* c);
61 static void thumbnail_sink_convert_pixbuf_to_rgb (ThumbnailSink* self, GdkPixbuf* buf);
62 static GstFlowReturn thumbnail_sink_real_preroll (GstBaseSink* base, GstBuffer* b);
63 static GObject * thumbnail_sink_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
64 static void thumbnail_sink_finalize (GObject* obj);
68 #line 31 "thumbnailsink.vala"
69 ThumbnailSink* thumbnail_sink_construct (GType object_type) {
70 #line 64 "thumbnailsink.c"
72 self = g_object_newv (object_type, 0, NULL);
73 #line 32 "thumbnailsink.vala"
74 gst_base_sink_set_sync (GST_BASE_SINK (self), FALSE);
75 #line 69 "thumbnailsink.c"
80 #line 31 "thumbnailsink.vala"
81 ThumbnailSink* thumbnail_sink_new (void) {
82 #line 31 "thumbnailsink.vala"
83 return thumbnail_sink_construct (TYPE_THUMBNAIL_SINK);
84 #line 78 "thumbnailsink.c"
88 static gpointer _gst_structure_copy0 (gpointer self) {
89 return self ? gst_structure_copy (self) : NULL;
93 #line 35 "thumbnailsink.vala"
94 static gboolean thumbnail_sink_real_set_caps (GstBaseSink* base, GstCaps* c) {
95 #line 89 "thumbnailsink.c"
97 gboolean result = FALSE;
99 gboolean _tmp0_ = FALSE;
100 self = THUMBNAIL_SINK (base);
101 #line 35 "thumbnailsink.vala"
102 g_return_val_if_fail (GST_IS_CAPS (c), FALSE);
103 #line 36 "thumbnailsink.vala"
104 if (gst_caps_get_size (c) < 1) {
105 #line 99 "thumbnailsink.c"
107 #line 37 "thumbnailsink.vala"
109 #line 103 "thumbnailsink.c"
111 #line 39 "thumbnailsink.vala"
112 s = _gst_structure_copy0 (gst_caps_get_structure (c, (guint) 0));
113 #line 41 "thumbnailsink.vala"
114 if (!gst_structure_get_int (s, "width", &self->priv->width)) {
115 #line 41 "thumbnailsink.vala"
117 #line 111 "thumbnailsink.c"
119 #line 42 "thumbnailsink.vala"
120 _tmp0_ = !gst_structure_get_int (s, "height", &self->priv->height);
121 #line 115 "thumbnailsink.c"
123 #line 41 "thumbnailsink.vala"
125 #line 119 "thumbnailsink.c"
127 _gst_structure_free0 (s);
128 #line 43 "thumbnailsink.vala"
130 #line 124 "thumbnailsink.c"
133 _gst_structure_free0 (s);
134 #line 44 "thumbnailsink.vala"
136 #line 130 "thumbnailsink.c"
140 #line 47 "thumbnailsink.vala"
141 static void thumbnail_sink_convert_pixbuf_to_rgb (ThumbnailSink* self, GdkPixbuf* buf) {
142 #line 136 "thumbnailsink.c"
145 #line 47 "thumbnailsink.vala"
146 g_return_if_fail (IS_THUMBNAIL_SINK (self));
147 #line 47 "thumbnailsink.vala"
148 g_return_if_fail (GDK_IS_PIXBUF (buf));
149 #line 48 "thumbnailsink.vala"
150 data = gdk_pixbuf_get_pixels (buf);
151 #line 49 "thumbnailsink.vala"
152 limit = gdk_pixbuf_get_width (buf) * gdk_pixbuf_get_height (buf);
153 #line 51 "thumbnailsink.vala"
155 #line 149 "thumbnailsink.c"
157 #line 51 "thumbnailsink.vala"
158 if (!((limit--) != 0)) {
159 #line 51 "thumbnailsink.vala"
161 #line 155 "thumbnailsink.c"
163 #line 52 "thumbnailsink.vala"
165 #line 53 "thumbnailsink.vala"
167 #line 54 "thumbnailsink.vala"
169 #line 56 "thumbnailsink.vala"
171 #line 165 "thumbnailsink.c"
176 #line 60 "thumbnailsink.vala"
177 static GstFlowReturn thumbnail_sink_real_preroll (GstBaseSink* base, GstBuffer* b) {
178 #line 172 "thumbnailsink.c"
179 ThumbnailSink * self;
180 GstFlowReturn result = 0;
182 self = THUMBNAIL_SINK (base);
183 #line 60 "thumbnailsink.vala"
184 g_return_val_if_fail (GST_IS_BUFFER (b), 0);
185 #line 61 "thumbnailsink.vala"
186 buf = gdk_pixbuf_new_from_data (b->data, GDK_COLORSPACE_RGB, TRUE, 8, self->priv->width, self->priv->height, self->priv->width * 4, NULL, NULL);
187 #line 63 "thumbnailsink.vala"
188 thumbnail_sink_convert_pixbuf_to_rgb (self, buf);
189 #line 65 "thumbnailsink.vala"
190 g_signal_emit_by_name (self, "have-thumbnail", buf);
191 #line 185 "thumbnailsink.c"
192 result = GST_FLOW_OK;
193 _g_object_unref0 (buf);
194 #line 66 "thumbnailsink.vala"
196 #line 190 "thumbnailsink.c"
200 static GObject * thumbnail_sink_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
202 GObjectClass * parent_class;
203 ThumbnailSink * self;
204 parent_class = G_OBJECT_CLASS (thumbnail_sink_parent_class);
205 obj = parent_class->constructor (type, n_construct_properties, construct_properties);
206 self = THUMBNAIL_SINK (obj);
213 static void thumbnail_sink_base_init (ThumbnailSinkClass * klass) {
215 GstStaticPadTemplate pad = {0};
216 GstPadTemplate* _tmp0_;
217 #line 18 "thumbnailsink.vala"
218 pad.name_template = "sink";
219 #line 19 "thumbnailsink.vala"
220 pad.direction = GST_PAD_SINK;
221 #line 20 "thumbnailsink.vala"
222 pad.presence = GST_PAD_ALWAYS;
223 #line 21 "thumbnailsink.vala"
224 pad.static_caps.string = THUMBNAIL_SINK_caps_string;
225 #line 23 "thumbnailsink.vala"
226 gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass), _tmp0_ = gst_static_pad_template_get (&pad));
227 #line 221 "thumbnailsink.c"
228 _gst_object_unref0 (_tmp0_);
233 static void thumbnail_sink_class_init (ThumbnailSinkClass * klass) {
234 thumbnail_sink_parent_class = g_type_class_peek_parent (klass);
235 g_type_class_add_private (klass, sizeof (ThumbnailSinkPrivate));
236 GST_BASE_SINK_CLASS (klass)->set_caps = thumbnail_sink_real_set_caps;
237 GST_BASE_SINK_CLASS (klass)->preroll = thumbnail_sink_real_preroll;
238 G_OBJECT_CLASS (klass)->constructor = thumbnail_sink_constructor;
239 G_OBJECT_CLASS (klass)->finalize = thumbnail_sink_finalize;
240 g_signal_new ("have_thumbnail", TYPE_THUMBNAIL_SINK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GDK_TYPE_PIXBUF);
244 static void thumbnail_sink_instance_init (ThumbnailSink * self) {
245 self->priv = THUMBNAIL_SINK_GET_PRIVATE (self);
249 static void thumbnail_sink_finalize (GObject* obj) {
250 ThumbnailSink * self;
251 self = THUMBNAIL_SINK (obj);
252 G_OBJECT_CLASS (thumbnail_sink_parent_class)->finalize (obj);
256 GType thumbnail_sink_get_type (void) {
257 static volatile gsize thumbnail_sink_type_id__volatile = 0;
258 if (g_once_init_enter (&thumbnail_sink_type_id__volatile)) {
259 static const GTypeInfo g_define_type_info = { sizeof (ThumbnailSinkClass), (GBaseInitFunc) thumbnail_sink_base_init, (GBaseFinalizeFunc) NULL, (GClassInitFunc) thumbnail_sink_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ThumbnailSink), 0, (GInstanceInitFunc) thumbnail_sink_instance_init, NULL };
260 GType thumbnail_sink_type_id;
261 thumbnail_sink_type_id = g_type_register_static (GST_TYPE_BASE_SINK, "ThumbnailSink", &g_define_type_info, 0);
262 g_once_init_leave (&thumbnail_sink_type_id__volatile, thumbnail_sink_type_id);
264 return thumbnail_sink_type_id__volatile;