1 /* clip.c generated by valac, the Vala compiler
2 * generated from clip.vala, do not modify */
4 /* Copyright 2009 Yorba Foundation
6 * This software is licensed under the GNU Lesser General Public License
7 * (version 2.1 or later). See the COPYING file in this distribution.
11 #include <glib-object.h>
15 #include <gdk-pixbuf/gdk-pixdata.h>
16 #include <gst/base/gstbasesink.h>
19 #include <gobject/gvaluecollector.h>
22 #define MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ())
24 #define MODEL_TYPE_GAP (model_gap_get_type ())
25 #define MODEL_GAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_GAP, ModelGap))
26 #define MODEL_GAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_GAP, ModelGapClass))
27 #define MODEL_IS_GAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_GAP))
28 #define MODEL_IS_GAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_GAP))
29 #define MODEL_GAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_GAP, ModelGapClass))
31 typedef struct _ModelGap ModelGap;
32 typedef struct _ModelGapClass ModelGapClass;
33 typedef struct _ModelGapPrivate ModelGapPrivate;
34 typedef struct _ModelParamSpecGap ModelParamSpecGap;
36 #define MODEL_TYPE_CLIP_FILE (model_clip_file_get_type ())
37 #define MODEL_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFile))
38 #define MODEL_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
39 #define MODEL_IS_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE))
40 #define MODEL_IS_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE))
41 #define MODEL_CLIP_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
43 typedef struct _ModelClipFile ModelClipFile;
44 typedef struct _ModelClipFileClass ModelClipFileClass;
45 typedef struct _ModelClipFilePrivate ModelClipFilePrivate;
46 #define _g_free0(var) (var = (g_free (var), NULL))
47 #define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
48 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
50 #define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
52 #define LOGGING_TYPE_LEVEL (logging_level_get_type ())
53 #define _gst_structure_free0(var) ((var == NULL) ? NULL : (var = (gst_structure_free (var), NULL)))
55 #define TYPE_FRACTION (fraction_get_type ())
56 typedef struct _Fraction Fraction;
58 #define MODEL_TYPE_FETCHER (model_fetcher_get_type ())
59 #define MODEL_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_FETCHER, ModelFetcher))
60 #define MODEL_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_FETCHER, ModelFetcherClass))
61 #define MODEL_IS_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_FETCHER))
62 #define MODEL_IS_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_FETCHER))
63 #define MODEL_FETCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_FETCHER, ModelFetcherClass))
65 typedef struct _ModelFetcher ModelFetcher;
66 typedef struct _ModelFetcherClass ModelFetcherClass;
67 typedef struct _ModelFetcherPrivate ModelFetcherPrivate;
68 #define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
69 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
71 #define MODEL_TYPE_CLIP_FETCHER (model_clip_fetcher_get_type ())
72 #define MODEL_CLIP_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FETCHER, ModelClipFetcher))
73 #define MODEL_CLIP_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FETCHER, ModelClipFetcherClass))
74 #define MODEL_IS_CLIP_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FETCHER))
75 #define MODEL_IS_CLIP_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FETCHER))
76 #define MODEL_CLIP_FETCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FETCHER, ModelClipFetcherClass))
78 typedef struct _ModelClipFetcher ModelClipFetcher;
79 typedef struct _ModelClipFetcherClass ModelClipFetcherClass;
80 typedef struct _ModelClipFetcherPrivate ModelClipFetcherPrivate;
82 #define MODEL_TYPE_THUMBNAIL_FETCHER (model_thumbnail_fetcher_get_type ())
83 #define MODEL_THUMBNAIL_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_THUMBNAIL_FETCHER, ModelThumbnailFetcher))
84 #define MODEL_THUMBNAIL_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_THUMBNAIL_FETCHER, ModelThumbnailFetcherClass))
85 #define MODEL_IS_THUMBNAIL_FETCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_THUMBNAIL_FETCHER))
86 #define MODEL_IS_THUMBNAIL_FETCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_THUMBNAIL_FETCHER))
87 #define MODEL_THUMBNAIL_FETCHER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_THUMBNAIL_FETCHER, ModelThumbnailFetcherClass))
89 typedef struct _ModelThumbnailFetcher ModelThumbnailFetcher;
90 typedef struct _ModelThumbnailFetcherClass ModelThumbnailFetcherClass;
91 typedef struct _ModelThumbnailFetcherPrivate ModelThumbnailFetcherPrivate;
93 #define TYPE_THUMBNAIL_SINK (thumbnail_sink_get_type ())
94 #define THUMBNAIL_SINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_THUMBNAIL_SINK, ThumbnailSink))
95 #define THUMBNAIL_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_THUMBNAIL_SINK, ThumbnailSinkClass))
96 #define IS_THUMBNAIL_SINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_THUMBNAIL_SINK))
97 #define IS_THUMBNAIL_SINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_THUMBNAIL_SINK))
98 #define THUMBNAIL_SINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_THUMBNAIL_SINK, ThumbnailSinkClass))
100 typedef struct _ThumbnailSink ThumbnailSink;
101 typedef struct _ThumbnailSinkClass ThumbnailSinkClass;
103 #define TYPE_SINGLE_DECODE_BIN (single_decode_bin_get_type ())
104 #define SINGLE_DECODE_BIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SINGLE_DECODE_BIN, SingleDecodeBin))
105 #define SINGLE_DECODE_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SINGLE_DECODE_BIN, SingleDecodeBinClass))
106 #define IS_SINGLE_DECODE_BIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SINGLE_DECODE_BIN))
107 #define IS_SINGLE_DECODE_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SINGLE_DECODE_BIN))
108 #define SINGLE_DECODE_BIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SINGLE_DECODE_BIN, SingleDecodeBinClass))
110 typedef struct _SingleDecodeBin SingleDecodeBin;
111 typedef struct _SingleDecodeBinClass SingleDecodeBinClass;
113 #define MODEL_TYPE_CLIP (model_clip_get_type ())
114 #define MODEL_CLIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP, ModelClip))
115 #define MODEL_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP, ModelClipClass))
116 #define MODEL_IS_CLIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP))
117 #define MODEL_IS_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP))
118 #define MODEL_CLIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP, ModelClipClass))
120 typedef struct _ModelClip ModelClip;
121 typedef struct _ModelClipClass ModelClipClass;
122 typedef struct _ModelClipPrivate ModelClipPrivate;
124 #define MODEL_TYPE_FETCHER_COMPLETION (model_fetcher_completion_get_type ())
125 #define MODEL_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_FETCHER_COMPLETION, ModelFetcherCompletion))
126 #define MODEL_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_FETCHER_COMPLETION, ModelFetcherCompletionClass))
127 #define MODEL_IS_FETCHER_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_FETCHER_COMPLETION))
128 #define MODEL_IS_FETCHER_COMPLETION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_FETCHER_COMPLETION))
129 #define MODEL_FETCHER_COMPLETION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_FETCHER_COMPLETION, ModelFetcherCompletionClass))
131 typedef struct _ModelFetcherCompletion ModelFetcherCompletion;
132 typedef struct _ModelFetcherCompletionClass ModelFetcherCompletionClass;
133 typedef struct _ModelFetcherCompletionPrivate ModelFetcherCompletionPrivate;
134 typedef struct _ModelParamSpecFetcherCompletion ModelParamSpecFetcherCompletion;
137 MODEL_MEDIA_TYPE_AUDIO,
138 MODEL_MEDIA_TYPE_VIDEO
142 GTypeInstance parent_instance;
143 volatile int ref_count;
144 ModelGapPrivate * priv;
149 struct _ModelGapClass {
150 GTypeClass parent_class;
151 void (*finalize) (ModelGap *self);
154 struct _ModelParamSpecGap {
155 GParamSpec parent_instance;
158 struct _ModelClipFile {
159 GObject parent_instance;
160 ModelClipFilePrivate * priv;
164 GdkPixbuf* thumbnail;
167 struct _ModelClipFileClass {
168 GObjectClass parent_class;
171 struct _ModelClipFilePrivate {
177 LOGGING_FACILITY_SIGNAL_HANDLERS,
178 LOGGING_FACILITY_DEVELOPER_WARNINGS,
179 LOGGING_FACILITY_GRAPH,
180 LOGGING_FACILITY_LOADING,
181 LOGGING_FACILITY_IMPORT,
182 LOGGING_FACILITY_SINGLEDECODEBIN
186 LOGGING_LEVEL_CRITICAL,
188 LOGGING_LEVEL_MEDIUM,
191 LOGGING_LEVEL_VERBOSE
199 struct _ModelFetcher {
200 GObject parent_instance;
201 ModelFetcherPrivate * priv;
203 GstElement* decodebin;
204 GstPipeline* pipeline;
205 ModelClipFile* clipfile;
209 struct _ModelFetcherClass {
210 GObjectClass parent_class;
211 void (*on_pad_added) (ModelFetcher* self, GstPad* pad);
212 void (*on_state_change) (ModelFetcher* self, GstBus* bus, GstMessage* message);
215 struct _ModelClipFetcher {
216 ModelFetcher parent_instance;
217 ModelClipFetcherPrivate * priv;
220 struct _ModelClipFetcherClass {
221 ModelFetcherClass parent_class;
224 struct _ModelThumbnailFetcher {
225 ModelFetcher parent_instance;
226 ModelThumbnailFetcherPrivate * priv;
229 struct _ModelThumbnailFetcherClass {
230 ModelFetcherClass parent_class;
233 struct _ModelThumbnailFetcherPrivate {
234 ThumbnailSink* thumbnail_sink;
235 GstElement* colorspace;
236 gint64 seek_position;
238 gboolean have_thumbnail;
242 GObject parent_instance;
243 ModelClipPrivate * priv;
244 ModelClipFile* clipfile;
246 gboolean is_recording;
250 struct _ModelClipClass {
251 GObjectClass parent_class;
254 struct _ModelClipPrivate {
261 struct _ModelFetcherCompletion {
262 GTypeInstance parent_instance;
263 volatile int ref_count;
264 ModelFetcherCompletionPrivate * priv;
267 struct _ModelFetcherCompletionClass {
268 GTypeClass parent_class;
269 void (*finalize) (ModelFetcherCompletion *self);
270 void (*complete) (ModelFetcherCompletion* self, ModelFetcher* fetcher);
273 struct _ModelParamSpecFetcherCompletion {
274 GParamSpec parent_instance;
278 static gpointer model_gap_parent_class = NULL;
279 static gpointer model_clip_file_parent_class = NULL;
280 static gpointer model_fetcher_parent_class = NULL;
281 static gpointer model_clip_fetcher_parent_class = NULL;
282 static gpointer model_thumbnail_fetcher_parent_class = NULL;
283 static gpointer model_clip_parent_class = NULL;
284 static gpointer model_fetcher_completion_parent_class = NULL;
286 GType model_media_type_get_type (void);
287 gpointer model_gap_ref (gpointer instance);
288 void model_gap_unref (gpointer instance);
289 GParamSpec* model_param_spec_gap (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
290 void model_value_set_gap (GValue* value, gpointer v_object);
291 void model_value_take_gap (GValue* value, gpointer v_object);
292 gpointer model_value_get_gap (const GValue* value);
293 GType model_gap_get_type (void);
295 MODEL_GAP_DUMMY_PROPERTY
297 ModelGap* model_gap_new (gint64 start, gint64 end);
298 ModelGap* model_gap_construct (GType object_type, gint64 start, gint64 end);
299 gboolean model_gap_is_empty (ModelGap* self);
300 ModelGap* model_gap_intersect (ModelGap* self, ModelGap* g);
301 static void model_gap_finalize (ModelGap* obj);
302 GType model_clip_file_get_type (void);
303 #define MODEL_CLIP_FILE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_CLIP_FILE, ModelClipFilePrivate))
305 MODEL_CLIP_FILE_DUMMY_PROPERTY,
306 MODEL_CLIP_FILE_LENGTH
308 void model_clip_file_set_length (ModelClipFile* self, gint64 value);
309 ModelClipFile* model_clip_file_new (const char* filename, gint64 length);
310 ModelClipFile* model_clip_file_construct (GType object_type, const char* filename, gint64 length);
311 gboolean model_clip_file_is_online (ModelClipFile* self);
312 GType logging_facility_get_type (void);
313 GType logging_level_get_type (void);
314 void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
315 void model_clip_file_set_online (ModelClipFile* self, gboolean o);
316 void model_clip_file_set_thumbnail (ModelClipFile* self, GdkPixbuf* b);
317 gboolean model_clip_file_has_caps_structure (ModelClipFile* self, ModelMediaType m);
318 gboolean model_clip_file_is_of_type (ModelClipFile* self, ModelMediaType t);
319 static gboolean model_clip_file_get_caps_structure (ModelClipFile* self, ModelMediaType m, GstStructure** s);
320 GType fraction_get_type (void);
321 Fraction* fraction_dup (const Fraction* self);
322 void fraction_free (Fraction* self);
323 gboolean model_clip_file_get_frame_rate (ModelClipFile* self, Fraction* rate);
324 gboolean model_clip_file_get_dimensions (ModelClipFile* self, gint* w, gint* h);
325 gboolean model_clip_file_get_sample_rate (ModelClipFile* self, gint* rate);
326 gboolean model_clip_file_get_video_format (ModelClipFile* self, guint32* fourcc);
327 gboolean model_clip_file_get_num_channels (ModelClipFile* self, gint* channels);
328 gboolean model_clip_file_get_num_channels_string (ModelClipFile* self, char** s);
329 gint64 model_clip_file_get_length (ModelClipFile* self);
330 static void model_clip_file_finalize (GObject* obj);
331 static void model_clip_file_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
332 static void model_clip_file_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
333 GType model_fetcher_get_type (void);
335 MODEL_FETCHER_DUMMY_PROPERTY
337 void model_fetcher_on_pad_added (ModelFetcher* self, GstPad* pad);
338 static void model_fetcher_real_on_pad_added (ModelFetcher* self, GstPad* pad);
339 void model_fetcher_on_state_change (ModelFetcher* self, GstBus* bus, GstMessage* message);
340 static void model_fetcher_real_on_state_change (ModelFetcher* self, GstBus* bus, GstMessage* message);
341 void model_fetcher_do_error (ModelFetcher* self, const char* _error_);
342 void model_fetcher_on_warning (ModelFetcher* self, GstBus* bus, GstMessage* message);
343 void model_fetcher_on_error (ModelFetcher* self, GstBus* bus, GstMessage* message);
344 ModelFetcher* model_fetcher_construct (GType object_type);
345 static void model_fetcher_finalize (GObject* obj);
346 GType model_clip_fetcher_get_type (void);
348 MODEL_CLIP_FETCHER_DUMMY_PROPERTY
350 static void _model_clip_file_set_online_model_clip_fetcher_clipfile_online (ModelClipFetcher* _sender, gboolean online, gpointer self);
351 GstElement* make_element (const char* name, GError** error);
352 static void _model_fetcher_on_pad_added_gst_element_pad_added (GstElement* _sender, GstPad* pad, gpointer self);
353 static void _model_fetcher_on_state_change_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
354 static void _model_fetcher_on_error_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
355 static void _model_fetcher_on_warning_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
356 ModelClipFetcher* model_clip_fetcher_new (const char* filename, GError** error);
357 ModelClipFetcher* model_clip_fetcher_construct (GType object_type, const char* filename, GError** error);
358 char* model_clip_fetcher_get_filename (ModelClipFetcher* self);
359 static void model_clip_fetcher_real_on_pad_added (ModelFetcher* base, GstPad* pad);
360 static GstPad* model_clip_fetcher_get_pad (ModelClipFetcher* self, const char* prefix);
361 static void model_clip_fetcher_real_on_state_change (ModelFetcher* base, GstBus* bus, GstMessage* message);
362 GType model_thumbnail_fetcher_get_type (void);
363 GType thumbnail_sink_get_type (void);
364 #define MODEL_THUMBNAIL_FETCHER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_THUMBNAIL_FETCHER, ModelThumbnailFetcherPrivate))
366 MODEL_THUMBNAIL_FETCHER_DUMMY_PROPERTY
368 SingleDecodeBin* single_decode_bin_new (GstCaps* caps, const char* name, const char* uri, GError** error);
369 SingleDecodeBin* single_decode_bin_construct (GType object_type, GstCaps* caps, const char* name, const char* uri, GError** error);
370 GType single_decode_bin_get_type (void);
371 ThumbnailSink* thumbnail_sink_new (void);
372 ThumbnailSink* thumbnail_sink_construct (GType object_type);
373 static void model_thumbnail_fetcher_on_have_thumbnail (ModelThumbnailFetcher* self, GdkPixbuf* buf);
374 static void _model_thumbnail_fetcher_on_have_thumbnail_thumbnail_sink_have_thumbnail (ThumbnailSink* _sender, GdkPixbuf* b, gpointer self);
375 ModelThumbnailFetcher* model_thumbnail_fetcher_new (ModelClipFile* f, gint64 time, GError** error);
376 ModelThumbnailFetcher* model_thumbnail_fetcher_construct (GType object_type, ModelClipFile* f, gint64 time, GError** error);
377 static void model_thumbnail_fetcher_real_on_pad_added (ModelFetcher* base, GstPad* pad);
378 static void model_thumbnail_fetcher_real_on_state_change (ModelFetcher* base, GstBus* bus, GstMessage* message);
379 static void model_thumbnail_fetcher_finalize (GObject* obj);
380 GType model_clip_get_type (void);
381 #define MODEL_CLIP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_CLIP, ModelClipPrivate))
383 MODEL_CLIP_DUMMY_PROPERTY,
385 MODEL_CLIP_MEDIA_START,
389 void model_clip_set_media_start_duration (ModelClip* self, gint64 media_start, gint64 duration);
390 void model_clip_set_start (ModelClip* self, gint64 value);
391 static void model_clip_on_clipfile_updated (ModelClip* self, ModelClipFile* f);
392 static void _model_clip_on_clipfile_updated_model_clip_file_updated (ModelClipFile* _sender, gpointer self);
393 ModelClip* model_clip_new (ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording);
394 ModelClip* model_clip_construct (GType object_type, ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording);
395 void model_clip_gnonlin_connect (ModelClip* self);
396 void model_clip_gnonlin_disconnect (ModelClip* self);
397 gint64 model_clip_get_media_start (ModelClip* self);
398 gint64 model_clip_get_duration (ModelClip* self);
399 gint64 model_clip_get_start (ModelClip* self);
400 gboolean model_clip_overlap_pos (ModelClip* self, gint64 start, gint64 length);
401 gboolean time_in_range (gint64 time, gint64 center, gint64 delta);
402 gint64 model_clip_get_end (ModelClip* self);
403 gint64 model_clip_snap (ModelClip* self, ModelClip* other, gint64 pad);
404 gboolean model_clip_snap_coord (ModelClip* self, gint64* s, gint64 span);
405 ModelClip* model_clip_copy (ModelClip* self);
406 gboolean model_clip_is_trimmed (ModelClip* self);
407 void model_clip_set_duration (ModelClip* self, gint64 value);
408 void model_clip_trim (ModelClip* self, gint64 delta, GdkWindowEdge edge);
409 void model_clip_save (ModelClip* self, FILE* f, gint id);
410 static void model_clip_finalize (GObject* obj);
411 static void model_clip_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
412 static void model_clip_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
413 gpointer model_fetcher_completion_ref (gpointer instance);
414 void model_fetcher_completion_unref (gpointer instance);
415 GParamSpec* model_param_spec_fetcher_completion (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
416 void model_value_set_fetcher_completion (GValue* value, gpointer v_object);
417 void model_value_take_fetcher_completion (GValue* value, gpointer v_object);
418 gpointer model_value_get_fetcher_completion (const GValue* value);
419 GType model_fetcher_completion_get_type (void);
421 MODEL_FETCHER_COMPLETION_DUMMY_PROPERTY
423 ModelFetcherCompletion* model_fetcher_completion_new (void);
424 ModelFetcherCompletion* model_fetcher_completion_construct (GType object_type);
425 void model_fetcher_completion_complete (ModelFetcherCompletion* self, ModelFetcher* fetcher);
426 static void model_fetcher_completion_real_complete (ModelFetcherCompletion* self, ModelFetcher* fetcher);
427 static void model_fetcher_completion_finalize (ModelFetcherCompletion* obj);
430 static void g_cclosure_user_marshal_VOID__INT64 (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
432 GType model_media_type_get_type (void) {
433 static volatile gsize model_media_type_type_id__volatile = 0;
434 if (g_once_init_enter (&model_media_type_type_id__volatile)) {
435 static const GEnumValue values[] = {{MODEL_MEDIA_TYPE_AUDIO, "MODEL_MEDIA_TYPE_AUDIO", "audio"}, {MODEL_MEDIA_TYPE_VIDEO, "MODEL_MEDIA_TYPE_VIDEO", "video"}, {0, NULL, NULL}};
436 GType model_media_type_type_id;
437 model_media_type_type_id = g_enum_register_static ("ModelMediaType", values);
438 g_once_init_leave (&model_media_type_type_id__volatile, model_media_type_type_id);
440 return model_media_type_type_id__volatile;
445 ModelGap* model_gap_construct (GType object_type, gint64 start, gint64 end) {
448 self = (ModelGap*) g_type_create_instance (object_type);
459 ModelGap* model_gap_new (gint64 start, gint64 end) {
461 return model_gap_construct (MODEL_TYPE_GAP, start, end);
467 gboolean model_gap_is_empty (ModelGap* self) {
469 gboolean result = FALSE;
471 g_return_val_if_fail (MODEL_IS_GAP (self), FALSE);
473 result = self->start >= self->end;
481 ModelGap* model_gap_intersect (ModelGap* self, ModelGap* g) {
483 ModelGap* result = NULL;
485 g_return_val_if_fail (MODEL_IS_GAP (self), NULL);
487 g_return_val_if_fail (MODEL_IS_GAP (g), NULL);
489 result = model_gap_new (MAX (self->start, g->start), MIN (self->end, g->end));
496 static void model_value_gap_init (GValue* value) {
497 value->data[0].v_pointer = NULL;
501 static void model_value_gap_free_value (GValue* value) {
502 if (value->data[0].v_pointer) {
503 model_gap_unref (value->data[0].v_pointer);
508 static void model_value_gap_copy_value (const GValue* src_value, GValue* dest_value) {
509 if (src_value->data[0].v_pointer) {
510 dest_value->data[0].v_pointer = model_gap_ref (src_value->data[0].v_pointer);
512 dest_value->data[0].v_pointer = NULL;
517 static gpointer model_value_gap_peek_pointer (const GValue* value) {
518 return value->data[0].v_pointer;
522 static gchar* model_value_gap_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
523 if (collect_values[0].v_pointer) {
525 object = collect_values[0].v_pointer;
526 if (object->parent_instance.g_class == NULL) {
527 return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
528 } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
529 return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
531 value->data[0].v_pointer = model_gap_ref (object);
533 value->data[0].v_pointer = NULL;
539 static gchar* model_value_gap_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
541 object_p = collect_values[0].v_pointer;
543 return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
545 if (!value->data[0].v_pointer) {
547 } else if (collect_flags && G_VALUE_NOCOPY_CONTENTS) {
548 *object_p = value->data[0].v_pointer;
550 *object_p = model_gap_ref (value->data[0].v_pointer);
556 GParamSpec* model_param_spec_gap (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
557 ModelParamSpecGap* spec;
558 g_return_val_if_fail (g_type_is_a (object_type, MODEL_TYPE_GAP), NULL);
559 spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
560 G_PARAM_SPEC (spec)->value_type = object_type;
561 return G_PARAM_SPEC (spec);
565 gpointer model_value_get_gap (const GValue* value) {
566 g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_GAP), NULL);
567 return value->data[0].v_pointer;
571 void model_value_set_gap (GValue* value, gpointer v_object) {
573 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_GAP));
574 old = value->data[0].v_pointer;
576 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_GAP));
577 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
578 value->data[0].v_pointer = v_object;
579 model_gap_ref (value->data[0].v_pointer);
581 value->data[0].v_pointer = NULL;
584 model_gap_unref (old);
589 void model_value_take_gap (GValue* value, gpointer v_object) {
591 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_GAP));
592 old = value->data[0].v_pointer;
594 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_GAP));
595 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
596 value->data[0].v_pointer = v_object;
598 value->data[0].v_pointer = NULL;
601 model_gap_unref (old);
606 static void model_gap_class_init (ModelGapClass * klass) {
607 model_gap_parent_class = g_type_class_peek_parent (klass);
608 MODEL_GAP_CLASS (klass)->finalize = model_gap_finalize;
612 static void model_gap_instance_init (ModelGap * self) {
617 static void model_gap_finalize (ModelGap* obj) {
619 self = MODEL_GAP (obj);
623 GType model_gap_get_type (void) {
624 static volatile gsize model_gap_type_id__volatile = 0;
625 if (g_once_init_enter (&model_gap_type_id__volatile)) {
626 static const GTypeValueTable g_define_type_value_table = { model_value_gap_init, model_value_gap_free_value, model_value_gap_copy_value, model_value_gap_peek_pointer, "p", model_value_gap_collect_value, "p", model_value_gap_lcopy_value };
627 static const GTypeInfo g_define_type_info = { sizeof (ModelGapClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_gap_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelGap), 0, (GInstanceInitFunc) model_gap_instance_init, &g_define_type_value_table };
628 static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
629 GType model_gap_type_id;
630 model_gap_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ModelGap", &g_define_type_info, &g_define_type_fundamental_info, 0);
631 g_once_init_leave (&model_gap_type_id__volatile, model_gap_type_id);
633 return model_gap_type_id__volatile;
637 gpointer model_gap_ref (gpointer instance) {
640 g_atomic_int_inc (&self->ref_count);
645 void model_gap_unref (gpointer instance) {
648 if (g_atomic_int_dec_and_test (&self->ref_count)) {
649 MODEL_GAP_GET_CLASS (self)->finalize (self);
650 g_type_free_instance ((GTypeInstance *) self);
656 ModelClipFile* model_clip_file_construct (GType object_type, const char* filename, gint64 length) {
658 ModelClipFile * self;
661 g_return_val_if_fail (filename != NULL, NULL);
663 self = (ModelClipFile*) g_object_new (object_type, NULL);
665 self->filename = (_tmp0_ = g_strdup (filename), _g_free0 (self->filename), _tmp0_);
667 model_clip_file_set_length (self, length);
669 self->priv->online = FALSE;
676 ModelClipFile* model_clip_file_new (const char* filename, gint64 length) {
678 return model_clip_file_construct (MODEL_TYPE_CLIP_FILE, filename, length);
684 gboolean model_clip_file_is_online (ModelClipFile* self) {
686 gboolean result = FALSE;
688 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
690 result = self->priv->online;
698 void model_clip_file_set_online (ModelClipFile* self, gboolean o) {
700 g_return_if_fail (MODEL_IS_CLIP_FILE (self));
702 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "set_online");
704 self->priv->online = o;
706 g_signal_emit_by_name (self, "updated");
712 void model_clip_file_set_thumbnail (ModelClipFile* self, GdkPixbuf* b) {
716 g_return_if_fail (MODEL_IS_CLIP_FILE (self));
718 g_return_if_fail (GDK_IS_PIXBUF (b));
720 self->thumbnail = (_tmp0_ = gdk_pixbuf_scale_simple (b, 64, 44, GDK_INTERP_BILINEAR), _g_object_unref0 (self->thumbnail), _tmp0_);
726 gboolean model_clip_file_has_caps_structure (ModelClipFile* self, ModelMediaType m) {
728 gboolean result = FALSE;
730 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
732 if (m == MODEL_MEDIA_TYPE_AUDIO) {
734 gboolean _tmp0_ = FALSE;
736 if (self->audio_caps == NULL) {
742 _tmp0_ = gst_caps_get_size (self->audio_caps) < 1;
755 if (m == MODEL_MEDIA_TYPE_VIDEO) {
757 gboolean _tmp1_ = FALSE;
759 if (self->video_caps == NULL) {
765 _tmp1_ = gst_caps_get_size (self->video_caps) < 1;
786 gboolean model_clip_file_is_of_type (ModelClipFile* self, ModelMediaType t) {
788 gboolean result = FALSE;
790 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
792 if (t == MODEL_MEDIA_TYPE_VIDEO) {
794 result = self->video_caps != NULL;
799 result = self->audio_caps != NULL;
806 static gpointer _gst_structure_copy0 (gpointer self) {
807 return self ? gst_structure_copy (self) : NULL;
812 static gboolean model_clip_file_get_caps_structure (ModelClipFile* self, ModelMediaType m, GstStructure** s) {
814 gboolean result = FALSE;
816 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
821 #line 100 "clip.vala"
822 if (!model_clip_file_has_caps_structure (self, m)) {
825 #line 101 "clip.vala"
829 #line 102 "clip.vala"
830 if (m == MODEL_MEDIA_TYPE_AUDIO) {
832 GstStructure* _tmp0_;
833 #line 103 "clip.vala"
834 *s = (_tmp0_ = _gst_structure_copy0 (gst_caps_get_structure (self->audio_caps, (guint) 0)), _gst_structure_free0 (*s), _tmp0_);
837 #line 104 "clip.vala"
838 if (m == MODEL_MEDIA_TYPE_VIDEO) {
840 GstStructure* _tmp1_;
841 #line 105 "clip.vala"
842 *s = (_tmp1_ = _gst_structure_copy0 (gst_caps_get_structure (self->video_caps, (guint) 0)), _gst_structure_free0 (*s), _tmp1_);
847 #line 107 "clip.vala"
853 #line 110 "clip.vala"
854 gboolean model_clip_file_get_frame_rate (ModelClipFile* self, Fraction* rate) {
856 gboolean result = FALSE;
857 GstStructure* structure;
858 GstStructure* _tmp2_;
860 GstStructure* _tmp0_ = NULL;
861 #line 110 "clip.vala"
862 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
865 #line 112 "clip.vala"
866 if (!(_tmp1_ = model_clip_file_get_caps_structure (self, MODEL_MEDIA_TYPE_VIDEO, &_tmp0_), structure = (_tmp2_ = _tmp0_, _gst_structure_free0 (structure), _tmp2_), _tmp1_)) {
869 _gst_structure_free0 (structure);
870 #line 113 "clip.vala"
874 result = gst_structure_get_fraction (structure, "framerate", &(*rate).numerator, &(*rate).denominator);
875 _gst_structure_free0 (structure);
876 #line 114 "clip.vala"
882 #line 117 "clip.vala"
883 gboolean model_clip_file_get_dimensions (ModelClipFile* self, gint* w, gint* h) {
885 gboolean result = FALSE;
887 GstStructure* _tmp2_;
889 GstStructure* _tmp0_ = NULL;
890 gboolean _tmp3_ = FALSE;
891 #line 117 "clip.vala"
892 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
895 #line 120 "clip.vala"
896 if (!(_tmp1_ = model_clip_file_get_caps_structure (self, MODEL_MEDIA_TYPE_VIDEO, &_tmp0_), s = (_tmp2_ = _tmp0_, _gst_structure_free0 (s), _tmp2_), _tmp1_)) {
899 _gst_structure_free0 (s);
900 #line 121 "clip.vala"
904 #line 123 "clip.vala"
905 if (gst_structure_get_int (s, "width", w)) {
906 #line 123 "clip.vala"
907 _tmp3_ = gst_structure_get_int (s, "height", h);
910 #line 123 "clip.vala"
915 _gst_structure_free0 (s);
916 #line 123 "clip.vala"
922 #line 126 "clip.vala"
923 gboolean model_clip_file_get_sample_rate (ModelClipFile* self, gint* rate) {
925 gboolean result = FALSE;
927 GstStructure* _tmp2_;
929 GstStructure* _tmp0_ = NULL;
930 #line 126 "clip.vala"
931 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
934 #line 128 "clip.vala"
935 if (!(_tmp1_ = model_clip_file_get_caps_structure (self, MODEL_MEDIA_TYPE_AUDIO, &_tmp0_), s = (_tmp2_ = _tmp0_, _gst_structure_free0 (s), _tmp2_), _tmp1_)) {
938 _gst_structure_free0 (s);
939 #line 129 "clip.vala"
943 result = gst_structure_get_int (s, "rate", rate);
944 _gst_structure_free0 (s);
945 #line 131 "clip.vala"
951 #line 134 "clip.vala"
952 gboolean model_clip_file_get_video_format (ModelClipFile* self, guint32* fourcc) {
954 gboolean result = FALSE;
956 GstStructure* _tmp2_;
958 GstStructure* _tmp0_ = NULL;
959 #line 134 "clip.vala"
960 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
963 #line 137 "clip.vala"
964 if (!(_tmp1_ = model_clip_file_get_caps_structure (self, MODEL_MEDIA_TYPE_VIDEO, &_tmp0_), s = (_tmp2_ = _tmp0_, _gst_structure_free0 (s), _tmp2_), _tmp1_)) {
967 _gst_structure_free0 (s);
968 #line 138 "clip.vala"
972 result = gst_structure_get_fourcc (s, "format", fourcc);
973 _gst_structure_free0 (s);
974 #line 140 "clip.vala"
980 #line 143 "clip.vala"
981 gboolean model_clip_file_get_num_channels (ModelClipFile* self, gint* channels) {
983 gboolean result = FALSE;
985 GstStructure* _tmp2_;
987 GstStructure* _tmp0_ = NULL;
988 #line 143 "clip.vala"
989 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
992 #line 145 "clip.vala"
993 if (!(_tmp1_ = model_clip_file_get_caps_structure (self, MODEL_MEDIA_TYPE_AUDIO, &_tmp0_), s = (_tmp2_ = _tmp0_, _gst_structure_free0 (s), _tmp2_), _tmp1_)) {
996 _gst_structure_free0 (s);
997 #line 146 "clip.vala"
1001 result = gst_structure_get_int (s, "channels", channels);
1002 _gst_structure_free0 (s);
1003 #line 149 "clip.vala"
1009 #line 152 "clip.vala"
1010 gboolean model_clip_file_get_num_channels_string (ModelClipFile* self, char** s) {
1012 gboolean result = FALSE;
1014 #line 152 "clip.vala"
1015 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), FALSE);
1020 #line 154 "clip.vala"
1021 if (!model_clip_file_get_num_channels (self, &i)) {
1024 #line 155 "clip.vala"
1028 #line 157 "clip.vala"
1032 #line 158 "clip.vala"
1033 *s = (_tmp0_ = g_strdup ("Mono"), _g_free0 (*s), _tmp0_);
1036 #line 159 "clip.vala"
1040 #line 160 "clip.vala"
1041 *s = (_tmp1_ = g_strdup ("Stereo"), _g_free0 (*s), _tmp1_);
1044 #line 161 "clip.vala"
1048 #line 162 "clip.vala"
1049 *s = (_tmp2_ = g_strdup_printf ("Surround %d.1", i - 1), _g_free0 (*s), _tmp2_);
1053 #line 164 "clip.vala"
1054 *s = (_tmp3_ = g_strdup_printf ("%d", i), _g_free0 (*s), _tmp3_);
1060 #line 165 "clip.vala"
1066 gint64 model_clip_file_get_length (ModelClipFile* self) {
1068 g_return_val_if_fail (MODEL_IS_CLIP_FILE (self), 0LL);
1069 #line 39 "clip.vala"
1070 if (!self->priv->online) {
1071 #line 40 "clip.vala"
1072 g_warning ("clip.vala:40: retrieving length while clip offline");
1075 result = self->priv->_length;
1076 #line 42 "clip.vala"
1082 void model_clip_file_set_length (ModelClipFile* self, gint64 value) {
1083 g_return_if_fail (MODEL_IS_CLIP_FILE (self));
1084 #line 46 "clip.vala"
1085 self->priv->_length = value;
1087 g_object_notify ((GObject *) self, "length");
1091 static void model_clip_file_class_init (ModelClipFileClass * klass) {
1092 model_clip_file_parent_class = g_type_class_peek_parent (klass);
1093 g_type_class_add_private (klass, sizeof (ModelClipFilePrivate));
1094 G_OBJECT_CLASS (klass)->get_property = model_clip_file_get_property;
1095 G_OBJECT_CLASS (klass)->set_property = model_clip_file_set_property;
1096 G_OBJECT_CLASS (klass)->finalize = model_clip_file_finalize;
1097 g_object_class_install_property (G_OBJECT_CLASS (klass), MODEL_CLIP_FILE_LENGTH, g_param_spec_int64 ("length", "length", "length", G_MININT64, G_MAXINT64, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
1098 g_signal_new ("updated", MODEL_TYPE_CLIP_FILE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
1102 static void model_clip_file_instance_init (ModelClipFile * self) {
1103 self->priv = MODEL_CLIP_FILE_GET_PRIVATE (self);
1104 self->thumbnail = NULL;
1108 static void model_clip_file_finalize (GObject* obj) {
1109 ModelClipFile * self;
1110 self = MODEL_CLIP_FILE (obj);
1111 _g_free0 (self->filename);
1112 _gst_caps_unref0 (self->video_caps);
1113 _gst_caps_unref0 (self->audio_caps);
1114 _g_object_unref0 (self->thumbnail);
1115 G_OBJECT_CLASS (model_clip_file_parent_class)->finalize (obj);
1119 GType model_clip_file_get_type (void) {
1120 static volatile gsize model_clip_file_type_id__volatile = 0;
1121 if (g_once_init_enter (&model_clip_file_type_id__volatile)) {
1122 static const GTypeInfo g_define_type_info = { sizeof (ModelClipFileClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_file_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClipFile), 0, (GInstanceInitFunc) model_clip_file_instance_init, NULL };
1123 GType model_clip_file_type_id;
1124 model_clip_file_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelClipFile", &g_define_type_info, 0);
1125 g_once_init_leave (&model_clip_file_type_id__volatile, model_clip_file_type_id);
1127 return model_clip_file_type_id__volatile;
1131 static void model_clip_file_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
1132 ModelClipFile * self;
1133 self = MODEL_CLIP_FILE (object);
1134 switch (property_id) {
1135 case MODEL_CLIP_FILE_LENGTH:
1136 g_value_set_int64 (value, model_clip_file_get_length (self));
1139 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1145 static void model_clip_file_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
1146 ModelClipFile * self;
1147 self = MODEL_CLIP_FILE (object);
1148 switch (property_id) {
1149 case MODEL_CLIP_FILE_LENGTH:
1150 model_clip_file_set_length (self, g_value_get_int64 (value));
1153 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
1159 #line 177 "clip.vala"
1160 static void model_fetcher_real_on_pad_added (ModelFetcher* self, GstPad* pad) {
1162 g_return_if_fail (MODEL_IS_FETCHER (self));
1163 g_critical ("Type `%s' does not implement abstract method `model_fetcher_on_pad_added'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
1168 #line 177 "clip.vala"
1169 void model_fetcher_on_pad_added (ModelFetcher* self, GstPad* pad) {
1170 #line 177 "clip.vala"
1171 MODEL_FETCHER_GET_CLASS (self)->on_pad_added (self, pad);
1176 #line 178 "clip.vala"
1177 static void model_fetcher_real_on_state_change (ModelFetcher* self, GstBus* bus, GstMessage* message) {
1179 g_return_if_fail (MODEL_IS_FETCHER (self));
1180 g_critical ("Type `%s' does not implement abstract method `model_fetcher_on_state_change'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
1185 #line 178 "clip.vala"
1186 void model_fetcher_on_state_change (ModelFetcher* self, GstBus* bus, GstMessage* message) {
1187 #line 178 "clip.vala"
1188 MODEL_FETCHER_GET_CLASS (self)->on_state_change (self, bus, message);
1193 #line 182 "clip.vala"
1194 void model_fetcher_do_error (ModelFetcher* self, const char* _error_) {
1197 #line 182 "clip.vala"
1198 g_return_if_fail (MODEL_IS_FETCHER (self));
1199 #line 182 "clip.vala"
1200 g_return_if_fail (_error_ != NULL);
1201 #line 183 "clip.vala"
1202 self->error_string = (_tmp0_ = g_strdup (_error_), _g_free0 (self->error_string), _tmp0_);
1203 #line 184 "clip.vala"
1204 gst_element_set_state (GST_ELEMENT (self->pipeline), GST_STATE_NULL);
1209 #line 187 "clip.vala"
1210 void model_fetcher_on_warning (ModelFetcher* self, GstBus* bus, GstMessage* message) {
1215 char* _tmp2_ = NULL;
1217 GError* _tmp0_ = NULL;
1218 #line 187 "clip.vala"
1219 g_return_if_fail (MODEL_IS_FETCHER (self));
1220 #line 187 "clip.vala"
1221 g_return_if_fail (GST_IS_BUS (bus));
1222 #line 187 "clip.vala"
1223 g_return_if_fail (GST_IS_MESSAGE (message));
1224 #line 188 "clip.vala"
1225 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_warning");
1229 #line 191 "clip.vala"
1230 (gst_message_parse_warning (message, &_tmp0_, &_tmp2_), _error_ = (_tmp1_ = _tmp0_, _g_error_free0 (_error_), _tmp1_));
1231 #line 191 "clip.vala"
1232 text = (_tmp3_ = _tmp2_, _g_free0 (text), _tmp3_);
1233 #line 192 "clip.vala"
1234 g_warning ("clip.vala:192: %s", text);
1236 _g_error_free0 (_error_);
1241 #line 195 "clip.vala"
1242 void model_fetcher_on_error (ModelFetcher* self, GstBus* bus, GstMessage* message) {
1247 char* _tmp2_ = NULL;
1249 GError* _tmp0_ = NULL;
1250 #line 195 "clip.vala"
1251 g_return_if_fail (MODEL_IS_FETCHER (self));
1252 #line 195 "clip.vala"
1253 g_return_if_fail (GST_IS_BUS (bus));
1254 #line 195 "clip.vala"
1255 g_return_if_fail (GST_IS_MESSAGE (message));
1256 #line 196 "clip.vala"
1257 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_error");
1261 #line 199 "clip.vala"
1262 (gst_message_parse_error (message, &_tmp0_, &_tmp2_), _error_ = (_tmp1_ = _tmp0_, _g_error_free0 (_error_), _tmp1_));
1263 #line 199 "clip.vala"
1264 text = (_tmp3_ = _tmp2_, _g_free0 (text), _tmp3_);
1265 #line 200 "clip.vala"
1266 model_fetcher_do_error (self, text);
1268 _g_error_free0 (_error_);
1273 #line 169 "clip.vala"
1274 ModelFetcher* model_fetcher_construct (GType object_type) {
1276 ModelFetcher * self;
1277 #line 169 "clip.vala"
1278 self = (ModelFetcher*) g_object_new (object_type, NULL);
1284 static void model_fetcher_class_init (ModelFetcherClass * klass) {
1285 model_fetcher_parent_class = g_type_class_peek_parent (klass);
1286 MODEL_FETCHER_CLASS (klass)->on_pad_added = model_fetcher_real_on_pad_added;
1287 MODEL_FETCHER_CLASS (klass)->on_state_change = model_fetcher_real_on_state_change;
1288 G_OBJECT_CLASS (klass)->finalize = model_fetcher_finalize;
1289 g_signal_new ("ready", MODEL_TYPE_FETCHER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_FETCHER);
1293 static void model_fetcher_instance_init (ModelFetcher * self) {
1297 static void model_fetcher_finalize (GObject* obj) {
1298 ModelFetcher * self;
1299 self = MODEL_FETCHER (obj);
1300 _gst_object_unref0 (self->filesrc);
1301 _gst_object_unref0 (self->decodebin);
1302 _gst_object_unref0 (self->pipeline);
1303 _g_object_unref0 (self->clipfile);
1304 _g_free0 (self->error_string);
1305 G_OBJECT_CLASS (model_fetcher_parent_class)->finalize (obj);
1309 GType model_fetcher_get_type (void) {
1310 static volatile gsize model_fetcher_type_id__volatile = 0;
1311 if (g_once_init_enter (&model_fetcher_type_id__volatile)) {
1312 static const GTypeInfo g_define_type_info = { sizeof (ModelFetcherClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_fetcher_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelFetcher), 0, (GInstanceInitFunc) model_fetcher_instance_init, NULL };
1313 GType model_fetcher_type_id;
1314 model_fetcher_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelFetcher", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
1315 g_once_init_leave (&model_fetcher_type_id__volatile, model_fetcher_type_id);
1317 return model_fetcher_type_id__volatile;
1321 #line 68 "clip.vala"
1322 static void _model_clip_file_set_online_model_clip_fetcher_clipfile_online (ModelClipFetcher* _sender, gboolean online, gpointer self) {
1324 model_clip_file_set_online (self, online);
1328 static gpointer _gst_object_ref0 (gpointer self) {
1329 return self ? gst_object_ref (self) : NULL;
1333 #line 177 "clip.vala"
1334 static void _model_fetcher_on_pad_added_gst_element_pad_added (GstElement* _sender, GstPad* pad, gpointer self) {
1336 model_fetcher_on_pad_added (self, pad);
1340 #line 178 "clip.vala"
1341 static void _model_fetcher_on_state_change_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
1343 model_fetcher_on_state_change (self, _sender, message);
1347 #line 195 "clip.vala"
1348 static void _model_fetcher_on_error_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
1350 model_fetcher_on_error (self, _sender, message);
1354 #line 187 "clip.vala"
1355 static void _model_fetcher_on_warning_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
1357 model_fetcher_on_warning (self, _sender, message);
1361 #line 207 "clip.vala"
1362 ModelClipFetcher* model_clip_fetcher_construct (GType object_type, const char* filename, GError** error) {
1364 GError * _inner_error_;
1365 ModelClipFetcher * self;
1366 ModelClipFile* _tmp1_;
1367 ModelClipFile* *_tmp0_;
1370 GstElement* *_tmp3_;
1373 GstElement* *_tmp6_;
1374 GstPipeline* _tmp9_;
1375 GstPipeline* *_tmp8_;
1379 #line 207 "clip.vala"
1380 g_return_val_if_fail (filename != NULL, NULL);
1382 _inner_error_ = NULL;
1383 #line 207 "clip.vala"
1384 self = (ModelClipFetcher*) model_fetcher_construct (object_type);
1385 #line 208 "clip.vala"
1386 _tmp0_ = &MODEL_FETCHER (self)->clipfile;
1387 #line 208 "clip.vala"
1388 (*_tmp0_) = (_tmp1_ = model_clip_file_new (filename, 0), _g_object_unref0 ((*_tmp0_)), _tmp1_);
1389 #line 210 "clip.vala"
1390 g_signal_connect_object (self, "clipfile-online", (GCallback) _model_clip_file_set_online_model_clip_fetcher_clipfile_online, MODEL_FETCHER (self)->clipfile, 0);
1391 #line 212 "clip.vala"
1392 _tmp2_ = make_element ("filesrc", &_inner_error_);
1394 if (_inner_error_ != NULL) {
1395 g_propagate_error (error, _inner_error_);
1396 g_object_unref (self);
1399 #line 212 "clip.vala"
1400 _tmp3_ = &MODEL_FETCHER (self)->filesrc;
1401 #line 212 "clip.vala"
1402 (*_tmp3_) = (_tmp4_ = _tmp2_, _gst_object_unref0 ((*_tmp3_)), _tmp4_);
1403 #line 213 "clip.vala"
1404 g_object_set (G_OBJECT (MODEL_FETCHER (self)->filesrc), "location", filename, NULL);
1405 #line 215 "clip.vala"
1406 _tmp5_ = make_element ("decodebin", &_inner_error_);
1408 if (_inner_error_ != NULL) {
1409 g_propagate_error (error, _inner_error_);
1410 g_object_unref (self);
1413 #line 215 "clip.vala"
1414 _tmp6_ = &MODEL_FETCHER (self)->decodebin;
1415 #line 215 "clip.vala"
1416 (*_tmp6_) = (_tmp7_ = GST_ELEMENT (GST_BIN (_tmp5_)), _gst_object_unref0 ((*_tmp6_)), _tmp7_);
1417 #line 216 "clip.vala"
1418 _tmp8_ = &MODEL_FETCHER (self)->pipeline;
1419 #line 216 "clip.vala"
1420 (*_tmp8_) = (_tmp9_ = (GstPipeline*) gst_pipeline_new ("pipeline"), _gst_object_unref0 ((*_tmp8_)), _tmp9_);
1421 #line 217 "clip.vala"
1422 gst_pipeline_set_auto_flush_bus (MODEL_FETCHER (self)->pipeline, FALSE);
1423 #line 218 "clip.vala"
1424 if (MODEL_FETCHER (self)->pipeline == NULL) {
1425 #line 219 "clip.vala"
1426 g_error ("clip.vala:219: can't construct pipeline");
1429 #line 220 "clip.vala"
1430 gst_bin_add_many (GST_BIN (MODEL_FETCHER (self)->pipeline), _gst_object_ref0 (MODEL_FETCHER (self)->filesrc), _gst_object_ref0 (MODEL_FETCHER (self)->decodebin), NULL);
1431 #line 222 "clip.vala"
1432 if (!gst_element_link (MODEL_FETCHER (self)->filesrc, MODEL_FETCHER (self)->decodebin)) {
1433 #line 223 "clip.vala"
1434 g_error ("clip.vala:223: can't link filesrc");
1437 #line 224 "clip.vala"
1438 g_signal_connect_object (MODEL_FETCHER (self)->decodebin, "pad-added", (GCallback) _model_fetcher_on_pad_added_gst_element_pad_added, MODEL_FETCHER (self), 0);
1439 #line 226 "clip.vala"
1440 bus = gst_pipeline_get_bus (MODEL_FETCHER (self)->pipeline);
1441 #line 228 "clip.vala"
1442 gst_bus_add_signal_watch (bus);
1443 #line 229 "clip.vala"
1444 g_signal_connect_object (bus, "message::state-changed", (GCallback) _model_fetcher_on_state_change_gst_bus_message, MODEL_FETCHER (self), 0);
1445 #line 230 "clip.vala"
1446 g_signal_connect_object (bus, "message::error", (GCallback) _model_fetcher_on_error_gst_bus_message, MODEL_FETCHER (self), 0);
1447 #line 231 "clip.vala"
1448 g_signal_connect_object (bus, "message::warning", (GCallback) _model_fetcher_on_warning_gst_bus_message, MODEL_FETCHER (self), 0);
1449 #line 233 "clip.vala"
1450 _tmp10_ = &MODEL_FETCHER (self)->error_string;
1451 #line 233 "clip.vala"
1452 (*_tmp10_) = (_tmp11_ = NULL, _g_free0 ((*_tmp10_)), _tmp11_);
1453 #line 234 "clip.vala"
1454 gst_element_set_state (GST_ELEMENT (MODEL_FETCHER (self)->pipeline), GST_STATE_PLAYING);
1456 _gst_object_unref0 (bus);
1461 #line 207 "clip.vala"
1462 ModelClipFetcher* model_clip_fetcher_new (const char* filename, GError** error) {
1463 #line 207 "clip.vala"
1464 return model_clip_fetcher_construct (MODEL_TYPE_CLIP_FETCHER, filename, error);
1469 #line 237 "clip.vala"
1470 char* model_clip_fetcher_get_filename (ModelClipFetcher* self) {
1472 char* result = NULL;
1473 #line 237 "clip.vala"
1474 g_return_val_if_fail (MODEL_IS_CLIP_FETCHER (self), NULL);
1476 result = g_strdup (MODEL_FETCHER (self)->clipfile->filename);
1477 #line 237 "clip.vala"
1483 #line 239 "clip.vala"
1484 static void model_clip_fetcher_real_on_pad_added (ModelFetcher* base, GstPad* pad) {
1486 ModelClipFetcher * self;
1487 GError * _inner_error_;
1489 GstElement* fake_sink;
1490 self = MODEL_CLIP_FETCHER (base);
1491 #line 239 "clip.vala"
1492 g_return_if_fail (GST_IS_PAD (pad));
1494 _inner_error_ = NULL;
1495 #line 240 "clip.vala"
1496 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_pad_added");
1503 GstCaps* _tmp0_ = NULL;
1505 #line 244 "clip.vala"
1506 if ((_tmp3_ = g_str_has_prefix (_tmp2_ = gst_caps_to_string (_tmp1_ = (g_object_get (pad, "caps", &_tmp0_, NULL), _tmp0_)), "video"), _g_free0 (_tmp2_), _gst_caps_unref0 (_tmp1_), _tmp3_)) {
1511 #line 245 "clip.vala"
1512 _tmp4_ = make_element ("fakesink", &_inner_error_);
1514 if (_inner_error_ != NULL) {
1515 goto __catch4_g_error;
1517 #line 245 "clip.vala"
1518 fake_sink = (_tmp5_ = _tmp4_, _gst_object_unref0 (fake_sink), _tmp5_);
1519 #line 246 "clip.vala"
1520 gst_bin_add (GST_BIN (MODEL_FETCHER (self)->pipeline), _gst_object_ref0 (fake_sink));
1521 #line 247 "clip.vala"
1522 fake_pad = (_tmp6_ = gst_element_get_static_pad (fake_sink, "sink"), _gst_object_unref0 (fake_pad), _tmp6_);
1523 #line 249 "clip.vala"
1524 if (!gst_element_sync_state_with_parent (fake_sink)) {
1525 #line 250 "clip.vala"
1526 g_error ("clip.vala:250: could not sync state with parent");
1533 #line 253 "clip.vala"
1534 _tmp7_ = make_element ("fakesink", &_inner_error_);
1536 if (_inner_error_ != NULL) {
1537 goto __catch4_g_error;
1539 #line 253 "clip.vala"
1540 fake_sink = (_tmp8_ = _tmp7_, _gst_object_unref0 (fake_sink), _tmp8_);
1541 #line 254 "clip.vala"
1542 gst_bin_add (GST_BIN (MODEL_FETCHER (self)->pipeline), _gst_object_ref0 (fake_sink));
1543 #line 255 "clip.vala"
1544 fake_pad = (_tmp9_ = gst_element_get_static_pad (fake_sink, "sink"), _gst_object_unref0 (fake_pad), _tmp9_);
1545 #line 257 "clip.vala"
1546 if (!gst_element_sync_state_with_parent (fake_sink)) {
1547 #line 258 "clip.vala"
1548 g_error ("clip.vala:258: could not sync state with parent");
1552 #line 261 "clip.vala"
1553 gst_pad_link (pad, fake_pad);
1561 _inner_error_ = NULL;
1567 if (_inner_error_ != NULL) {
1568 _gst_object_unref0 (fake_pad);
1569 _gst_object_unref0 (fake_sink);
1570 g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
1571 g_clear_error (&_inner_error_);
1574 _gst_object_unref0 (fake_pad);
1575 _gst_object_unref0 (fake_sink);
1579 #line 267 "clip.vala"
1580 static GstPad* model_clip_fetcher_get_pad (ModelClipFetcher* self, const char* prefix) {
1582 GstPad* result = NULL;
1583 #line 267 "clip.vala"
1584 g_return_val_if_fail (MODEL_IS_CLIP_FETCHER (self), NULL);
1585 #line 267 "clip.vala"
1586 g_return_val_if_fail (prefix != NULL, NULL);
1589 GList* pad_collection;
1591 #line 268 "clip.vala"
1592 pad_collection = MODEL_FETCHER (self)->decodebin->pads;
1594 for (pad_it = pad_collection; pad_it != NULL; pad_it = pad_it->next) {
1596 #line 268 "clip.vala"
1597 pad = _gst_object_ref0 ((GstPad*) pad_it->data);
1601 GstCaps* _tmp0_ = NULL;
1604 #line 269 "clip.vala"
1605 caps = (_tmp2_ = gst_caps_to_string (_tmp1_ = (g_object_get (pad, "caps", &_tmp0_, NULL), _tmp0_)), _gst_caps_unref0 (_tmp1_), _tmp2_);
1606 #line 270 "clip.vala"
1607 if (g_str_has_prefix (caps, prefix)) {
1611 #line 271 "clip.vala"
1615 _gst_object_unref0 (pad);
1621 #line 274 "clip.vala"
1627 #line 277 "clip.vala"
1628 static void model_clip_fetcher_real_on_state_change (ModelFetcher* base, GstBus* bus, GstMessage* message) {
1630 ModelClipFetcher * self;
1631 GstState old_state = 0;
1632 GstState new_state = 0;
1633 GstState pending = 0;
1634 self = MODEL_CLIP_FETCHER (base);
1635 #line 277 "clip.vala"
1636 g_return_if_fail (GST_IS_BUS (bus));
1637 #line 277 "clip.vala"
1638 g_return_if_fail (GST_IS_MESSAGE (message));
1639 #line 278 "clip.vala"
1640 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_state_change");
1641 #line 279 "clip.vala"
1642 if (message->src != GST_OBJECT (MODEL_FETCHER (self)->pipeline)) {
1643 #line 280 "clip.vala"
1647 #line 286 "clip.vala"
1648 gst_message_parse_state_changed (message, &old_state, &new_state, &pending);
1649 #line 287 "clip.vala"
1650 if (new_state == old_state) {
1651 #line 288 "clip.vala"
1655 #line 290 "clip.vala"
1656 if (new_state == GST_STATE_PLAYING) {
1661 gint64 length = 0LL;
1662 gboolean _tmp7_ = FALSE;
1663 #line 291 "clip.vala"
1664 pad = model_clip_fetcher_get_pad (self, "video");
1665 #line 292 "clip.vala"
1670 GstCaps* _tmp0_ = NULL;
1671 #line 293 "clip.vala"
1672 _tmp1_ = &MODEL_FETCHER (self)->clipfile->video_caps;
1673 #line 293 "clip.vala"
1674 (*_tmp1_) = (_tmp2_ = (g_object_get (pad, "caps", &_tmp0_, NULL), _tmp0_), _gst_caps_unref0 ((*_tmp1_)), _tmp2_);
1677 #line 296 "clip.vala"
1678 pad = (_tmp3_ = model_clip_fetcher_get_pad (self, "audio"), _gst_object_unref0 (pad), _tmp3_);
1679 #line 297 "clip.vala"
1684 GstCaps* _tmp4_ = NULL;
1685 #line 298 "clip.vala"
1686 _tmp5_ = &MODEL_FETCHER (self)->clipfile->audio_caps;
1687 #line 298 "clip.vala"
1688 (*_tmp5_) = (_tmp6_ = (g_object_get (pad, "caps", &_tmp4_, NULL), _tmp4_), _gst_caps_unref0 ((*_tmp5_)), _tmp6_);
1691 #line 301 "clip.vala"
1692 format = GST_FORMAT_TIME;
1693 #line 303 "clip.vala"
1694 if (!gst_element_query_duration (GST_ELEMENT (MODEL_FETCHER (self)->pipeline), &format, &length)) {
1695 #line 303 "clip.vala"
1699 #line 304 "clip.vala"
1700 _tmp7_ = format != GST_FORMAT_TIME;
1703 #line 303 "clip.vala"
1705 #line 305 "clip.vala"
1706 model_fetcher_do_error (MODEL_FETCHER (self), "Can't fetch length");
1708 _gst_object_unref0 (pad);
1709 #line 306 "clip.vala"
1713 #line 308 "clip.vala"
1714 model_clip_file_set_length (MODEL_FETCHER (self)->clipfile, length);
1715 #line 310 "clip.vala"
1716 g_signal_emit_by_name (self, "clipfile-online", TRUE);
1717 #line 311 "clip.vala"
1718 gst_element_set_state (GST_ELEMENT (MODEL_FETCHER (self)->pipeline), GST_STATE_NULL);
1720 _gst_object_unref0 (pad);
1722 #line 312 "clip.vala"
1723 if (new_state == GST_STATE_NULL) {
1724 #line 313 "clip.vala"
1725 g_signal_emit_by_name (MODEL_FETCHER (self), "ready", MODEL_FETCHER (self));
1732 static void model_clip_fetcher_class_init (ModelClipFetcherClass * klass) {
1733 model_clip_fetcher_parent_class = g_type_class_peek_parent (klass);
1734 MODEL_FETCHER_CLASS (klass)->on_pad_added = model_clip_fetcher_real_on_pad_added;
1735 MODEL_FETCHER_CLASS (klass)->on_state_change = model_clip_fetcher_real_on_state_change;
1736 g_signal_new ("clipfile_online", MODEL_TYPE_CLIP_FETCHER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
1740 static void model_clip_fetcher_instance_init (ModelClipFetcher * self) {
1744 GType model_clip_fetcher_get_type (void) {
1745 static volatile gsize model_clip_fetcher_type_id__volatile = 0;
1746 if (g_once_init_enter (&model_clip_fetcher_type_id__volatile)) {
1747 static const GTypeInfo g_define_type_info = { sizeof (ModelClipFetcherClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_fetcher_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClipFetcher), 0, (GInstanceInitFunc) model_clip_fetcher_instance_init, NULL };
1748 GType model_clip_fetcher_type_id;
1749 model_clip_fetcher_type_id = g_type_register_static (MODEL_TYPE_FETCHER, "ModelClipFetcher", &g_define_type_info, 0);
1750 g_once_init_leave (&model_clip_fetcher_type_id__volatile, model_clip_fetcher_type_id);
1752 return model_clip_fetcher_type_id__volatile;
1756 static gpointer _g_object_ref0 (gpointer self) {
1757 return self ? g_object_ref (self) : NULL;
1761 #line 359 "clip.vala"
1762 static void _model_thumbnail_fetcher_on_have_thumbnail_thumbnail_sink_have_thumbnail (ThumbnailSink* _sender, GdkPixbuf* b, gpointer self) {
1764 model_thumbnail_fetcher_on_have_thumbnail (self, b);
1768 #line 325 "clip.vala"
1769 ModelThumbnailFetcher* model_thumbnail_fetcher_construct (GType object_type, ModelClipFile* f, gint64 time, GError** error) {
1771 GError * _inner_error_;
1772 ModelThumbnailFetcher * self;
1773 ModelClipFile* _tmp1_;
1774 ModelClipFile* *_tmp0_;
1776 SingleDecodeBin* _tmp3_;
1777 SingleDecodeBin* single_bin;
1778 GstPipeline* _tmp5_;
1779 GstPipeline* *_tmp4_;
1780 ThumbnailSink* _tmp6_;
1784 #line 325 "clip.vala"
1785 g_return_val_if_fail (MODEL_IS_CLIP_FILE (f), NULL);
1787 _inner_error_ = NULL;
1788 #line 325 "clip.vala"
1789 self = (ModelThumbnailFetcher*) model_fetcher_construct (object_type);
1790 #line 326 "clip.vala"
1791 _tmp0_ = &MODEL_FETCHER (self)->clipfile;
1792 #line 326 "clip.vala"
1793 (*_tmp0_) = (_tmp1_ = _g_object_ref0 (f), _g_object_unref0 ((*_tmp0_)), _tmp1_);
1794 #line 327 "clip.vala"
1795 self->priv->seek_position = time;
1796 #line 329 "clip.vala"
1797 single_bin = (_tmp3_ = single_decode_bin_new (_tmp2_ = gst_caps_from_string ("video/x-raw-rgb; video/x-raw-yuv"), "singledecoder", f->filename, &_inner_error_), _gst_caps_unref0 (_tmp2_), _tmp3_);
1799 if (_inner_error_ != NULL) {
1800 g_propagate_error (error, _inner_error_);
1801 g_object_unref (self);
1804 #line 333 "clip.vala"
1805 _tmp4_ = &MODEL_FETCHER (self)->pipeline;
1806 #line 333 "clip.vala"
1807 (*_tmp4_) = (_tmp5_ = (GstPipeline*) gst_pipeline_new ("pipeline"), _gst_object_unref0 ((*_tmp4_)), _tmp5_);
1808 #line 334 "clip.vala"
1809 gst_pipeline_set_auto_flush_bus (MODEL_FETCHER (self)->pipeline, FALSE);
1810 #line 336 "clip.vala"
1811 self->priv->thumbnail_sink = (_tmp6_ = thumbnail_sink_new (), _gst_object_unref0 (self->priv->thumbnail_sink), _tmp6_);
1812 #line 337 "clip.vala"
1813 g_signal_connect_object (self->priv->thumbnail_sink, "have-thumbnail", (GCallback) _model_thumbnail_fetcher_on_have_thumbnail_thumbnail_sink_have_thumbnail, self, 0);
1814 #line 339 "clip.vala"
1815 _tmp7_ = make_element ("ffmpegcolorspace", &_inner_error_);
1817 if (_inner_error_ != NULL) {
1818 g_propagate_error (error, _inner_error_);
1819 _gst_object_unref0 (single_bin);
1820 g_object_unref (self);
1823 #line 339 "clip.vala"
1824 self->priv->colorspace = (_tmp8_ = _tmp7_, _gst_object_unref0 (self->priv->colorspace), _tmp8_);
1825 #line 341 "clip.vala"
1826 gst_bin_add_many (GST_BIN (MODEL_FETCHER (self)->pipeline), _gst_object_ref0 (GST_ELEMENT (single_bin)), _gst_object_ref0 (GST_ELEMENT (self->priv->thumbnail_sink)), _gst_object_ref0 (self->priv->colorspace), NULL);
1827 #line 343 "clip.vala"
1828 g_signal_connect_object (GST_ELEMENT (single_bin), "pad-added", (GCallback) _model_fetcher_on_pad_added_gst_element_pad_added, MODEL_FETCHER (self), 0);
1829 #line 345 "clip.vala"
1830 gst_element_link (self->priv->colorspace, GST_ELEMENT (self->priv->thumbnail_sink));
1831 #line 347 "clip.vala"
1832 bus = gst_pipeline_get_bus (MODEL_FETCHER (self)->pipeline);
1833 #line 349 "clip.vala"
1834 gst_bus_add_signal_watch (bus);
1835 #line 350 "clip.vala"
1836 g_signal_connect_object (bus, "message::state-changed", (GCallback) _model_fetcher_on_state_change_gst_bus_message, MODEL_FETCHER (self), 0);
1837 #line 351 "clip.vala"
1838 g_signal_connect_object (bus, "message::error", (GCallback) _model_fetcher_on_error_gst_bus_message, MODEL_FETCHER (self), 0);
1839 #line 352 "clip.vala"
1840 g_signal_connect_object (bus, "message::warning", (GCallback) _model_fetcher_on_warning_gst_bus_message, MODEL_FETCHER (self), 0);
1841 #line 354 "clip.vala"
1842 self->priv->have_thumbnail = FALSE;
1843 #line 355 "clip.vala"
1844 self->priv->done_seek = FALSE;
1845 #line 356 "clip.vala"
1846 gst_element_set_state (GST_ELEMENT (MODEL_FETCHER (self)->pipeline), GST_STATE_PAUSED);
1848 _gst_object_unref0 (single_bin);
1849 _gst_object_unref0 (bus);
1854 #line 325 "clip.vala"
1855 ModelThumbnailFetcher* model_thumbnail_fetcher_new (ModelClipFile* f, gint64 time, GError** error) {
1856 #line 325 "clip.vala"
1857 return model_thumbnail_fetcher_construct (MODEL_TYPE_THUMBNAIL_FETCHER, f, time, error);
1862 #line 359 "clip.vala"
1863 static void model_thumbnail_fetcher_on_have_thumbnail (ModelThumbnailFetcher* self, GdkPixbuf* buf) {
1864 #line 359 "clip.vala"
1865 g_return_if_fail (MODEL_IS_THUMBNAIL_FETCHER (self));
1866 #line 359 "clip.vala"
1867 g_return_if_fail (GDK_IS_PIXBUF (buf));
1868 #line 360 "clip.vala"
1869 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_have_thumbnail");
1870 #line 361 "clip.vala"
1871 if (self->priv->done_seek) {
1872 #line 362 "clip.vala"
1873 self->priv->have_thumbnail = TRUE;
1874 #line 363 "clip.vala"
1875 model_clip_file_set_thumbnail (MODEL_FETCHER (self)->clipfile, buf);
1881 #line 367 "clip.vala"
1882 static void model_thumbnail_fetcher_real_on_pad_added (ModelFetcher* base, GstPad* pad) {
1884 ModelThumbnailFetcher * self;
1888 self = MODEL_THUMBNAIL_FETCHER (base);
1889 #line 367 "clip.vala"
1890 g_return_if_fail (GST_IS_PAD (pad));
1891 #line 368 "clip.vala"
1892 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_pad_added");
1893 #line 369 "clip.vala"
1894 c = gst_pad_get_caps (pad);
1895 #line 371 "clip.vala"
1896 if ((_tmp1_ = g_str_has_prefix (_tmp0_ = gst_caps_to_string (c), "video"), _g_free0 (_tmp0_), _tmp1_)) {
1899 #line 372 "clip.vala"
1900 gst_pad_link (pad, _tmp2_ = gst_element_get_static_pad (self->priv->colorspace, "sink"));
1902 _gst_object_unref0 (_tmp2_);
1904 _gst_caps_unref0 (c);
1908 #line 376 "clip.vala"
1909 static void model_thumbnail_fetcher_real_on_state_change (ModelFetcher* base, GstBus* bus, GstMessage* message) {
1911 ModelThumbnailFetcher * self;
1912 GstState new_state = 0;
1913 GstState old_state = 0;
1914 GstState pending_state = 0;
1915 gboolean _tmp0_ = FALSE;
1916 self = MODEL_THUMBNAIL_FETCHER (base);
1917 #line 376 "clip.vala"
1918 g_return_if_fail (GST_IS_BUS (bus));
1919 #line 376 "clip.vala"
1920 g_return_if_fail (GST_IS_MESSAGE (message));
1921 #line 377 "clip.vala"
1922 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_state_change");
1923 #line 378 "clip.vala"
1924 if (message->src != GST_OBJECT (MODEL_FETCHER (self)->pipeline)) {
1925 #line 379 "clip.vala"
1929 #line 385 "clip.vala"
1930 gst_message_parse_state_changed (message, &old_state, &new_state, &pending_state);
1931 #line 386 "clip.vala"
1932 if (new_state == old_state) {
1933 #line 387 "clip.vala"
1934 _tmp0_ = new_state != GST_STATE_PAUSED;
1937 #line 386 "clip.vala"
1941 #line 386 "clip.vala"
1943 #line 388 "clip.vala"
1947 #line 390 "clip.vala"
1948 if (new_state == GST_STATE_PAUSED) {
1949 #line 391 "clip.vala"
1950 if (!self->priv->done_seek) {
1951 #line 392 "clip.vala"
1952 self->priv->done_seek = TRUE;
1953 #line 393 "clip.vala"
1954 gst_element_seek_simple (GST_ELEMENT (MODEL_FETCHER (self)->pipeline), GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, self->priv->seek_position);
1957 #line 395 "clip.vala"
1958 if (self->priv->have_thumbnail) {
1959 #line 396 "clip.vala"
1960 gst_element_set_state (GST_ELEMENT (MODEL_FETCHER (self)->pipeline), GST_STATE_NULL);
1965 #line 398 "clip.vala"
1966 if (new_state == GST_STATE_NULL) {
1967 #line 399 "clip.vala"
1968 g_signal_emit_by_name (MODEL_FETCHER (self), "ready", MODEL_FETCHER (self));
1975 static void model_thumbnail_fetcher_class_init (ModelThumbnailFetcherClass * klass) {
1976 model_thumbnail_fetcher_parent_class = g_type_class_peek_parent (klass);
1977 g_type_class_add_private (klass, sizeof (ModelThumbnailFetcherPrivate));
1978 MODEL_FETCHER_CLASS (klass)->on_pad_added = model_thumbnail_fetcher_real_on_pad_added;
1979 MODEL_FETCHER_CLASS (klass)->on_state_change = model_thumbnail_fetcher_real_on_state_change;
1980 G_OBJECT_CLASS (klass)->finalize = model_thumbnail_fetcher_finalize;
1984 static void model_thumbnail_fetcher_instance_init (ModelThumbnailFetcher * self) {
1985 self->priv = MODEL_THUMBNAIL_FETCHER_GET_PRIVATE (self);
1989 static void model_thumbnail_fetcher_finalize (GObject* obj) {
1990 ModelThumbnailFetcher * self;
1991 self = MODEL_THUMBNAIL_FETCHER (obj);
1992 _gst_object_unref0 (self->priv->thumbnail_sink);
1993 _gst_object_unref0 (self->priv->colorspace);
1994 G_OBJECT_CLASS (model_thumbnail_fetcher_parent_class)->finalize (obj);
1998 GType model_thumbnail_fetcher_get_type (void) {
1999 static volatile gsize model_thumbnail_fetcher_type_id__volatile = 0;
2000 if (g_once_init_enter (&model_thumbnail_fetcher_type_id__volatile)) {
2001 static const GTypeInfo g_define_type_info = { sizeof (ModelThumbnailFetcherClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_thumbnail_fetcher_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelThumbnailFetcher), 0, (GInstanceInitFunc) model_thumbnail_fetcher_instance_init, NULL };
2002 GType model_thumbnail_fetcher_type_id;
2003 model_thumbnail_fetcher_type_id = g_type_register_static (MODEL_TYPE_FETCHER, "ModelThumbnailFetcher", &g_define_type_info, 0);
2004 g_once_init_leave (&model_thumbnail_fetcher_type_id__volatile, model_thumbnail_fetcher_type_id);
2006 return model_thumbnail_fetcher_type_id__volatile;
2010 #line 488 "clip.vala"
2011 static void _model_clip_on_clipfile_updated_model_clip_file_updated (ModelClipFile* _sender, gpointer self) {
2013 model_clip_on_clipfile_updated (self, _sender);
2017 #line 473 "clip.vala"
2018 ModelClip* model_clip_construct (GType object_type, ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording) {
2021 ModelClipFile* _tmp0_;
2023 #line 473 "clip.vala"
2024 g_return_val_if_fail (MODEL_IS_CLIP_FILE (clipfile), NULL);
2025 #line 473 "clip.vala"
2026 g_return_val_if_fail (name != NULL, NULL);
2027 #line 473 "clip.vala"
2028 self = (ModelClip*) g_object_new (object_type, NULL);
2029 #line 475 "clip.vala"
2030 self->is_recording = is_recording;
2031 #line 476 "clip.vala"
2032 self->clipfile = (_tmp0_ = _g_object_ref0 (clipfile), _g_object_unref0 (self->clipfile), _tmp0_);
2033 #line 477 "clip.vala"
2035 #line 478 "clip.vala"
2036 self->name = (_tmp1_ = g_strdup (name), _g_free0 (self->name), _tmp1_);
2037 #line 479 "clip.vala"
2038 self->priv->connected = model_clip_file_is_online (clipfile);
2039 #line 480 "clip.vala"
2040 model_clip_set_media_start_duration (self, media_start, duration);
2041 #line 481 "clip.vala"
2042 model_clip_set_start (self, start);
2043 #line 482 "clip.vala"
2044 g_signal_connect_object (clipfile, "updated", (GCallback) _model_clip_on_clipfile_updated_model_clip_file_updated, self, 0);
2050 #line 473 "clip.vala"
2051 ModelClip* model_clip_new (ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording) {
2052 #line 473 "clip.vala"
2053 return model_clip_construct (MODEL_TYPE_CLIP, clipfile, t, name, start, media_start, duration, is_recording);
2058 #line 485 "clip.vala"
2059 void model_clip_gnonlin_connect (ModelClip* self) {
2060 #line 485 "clip.vala"
2061 g_return_if_fail (MODEL_IS_CLIP (self));
2062 #line 485 "clip.vala"
2063 self->priv->connected = TRUE;
2068 #line 486 "clip.vala"
2069 void model_clip_gnonlin_disconnect (ModelClip* self) {
2070 #line 486 "clip.vala"
2071 g_return_if_fail (MODEL_IS_CLIP (self));
2072 #line 486 "clip.vala"
2073 self->priv->connected = FALSE;
2078 #line 488 "clip.vala"
2079 static void model_clip_on_clipfile_updated (ModelClip* self, ModelClipFile* f) {
2080 #line 488 "clip.vala"
2081 g_return_if_fail (MODEL_IS_CLIP (self));
2082 #line 488 "clip.vala"
2083 g_return_if_fail (MODEL_IS_CLIP_FILE (f));
2084 #line 489 "clip.vala"
2085 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clipfile_updated");
2086 #line 490 "clip.vala"
2087 if (model_clip_file_is_online (f)) {
2088 #line 491 "clip.vala"
2089 if (!self->priv->connected) {
2090 #line 492 "clip.vala"
2091 self->priv->connected = TRUE;
2092 #line 496 "clip.vala"
2093 model_clip_set_media_start_duration (self, model_clip_get_media_start (self), model_clip_get_duration (self));
2094 #line 498 "clip.vala"
2095 model_clip_set_start (self, model_clip_get_start (self));
2099 #line 501 "clip.vala"
2100 if (self->priv->connected) {
2101 #line 502 "clip.vala"
2102 self->priv->connected = FALSE;
2106 #line 505 "clip.vala"
2107 g_signal_emit_by_name (self, "updated", self);
2112 #line 508 "clip.vala"
2113 gboolean model_clip_overlap_pos (ModelClip* self, gint64 start, gint64 length) {
2115 gboolean result = FALSE;
2116 gboolean _tmp0_ = FALSE;
2117 #line 508 "clip.vala"
2118 g_return_val_if_fail (MODEL_IS_CLIP (self), FALSE);
2119 #line 509 "clip.vala"
2120 if (start < (model_clip_get_start (self) + model_clip_get_duration (self))) {
2121 #line 510 "clip.vala"
2122 _tmp0_ = model_clip_get_start (self) < (start + length);
2125 #line 509 "clip.vala"
2130 #line 509 "clip.vala"
2136 #line 513 "clip.vala"
2137 gint64 model_clip_snap (ModelClip* self, ModelClip* other, gint64 pad) {
2139 gint64 result = 0LL;
2140 #line 513 "clip.vala"
2141 g_return_val_if_fail (MODEL_IS_CLIP (self), 0LL);
2142 #line 513 "clip.vala"
2143 g_return_val_if_fail (MODEL_IS_CLIP (other), 0LL);
2144 #line 514 "clip.vala"
2145 if (time_in_range (model_clip_get_start (self), model_clip_get_start (other), pad)) {
2147 result = model_clip_get_start (other);
2148 #line 515 "clip.vala"
2152 #line 516 "clip.vala"
2153 if (time_in_range (model_clip_get_start (self), model_clip_get_end (other), pad)) {
2155 result = model_clip_get_end (other);
2156 #line 517 "clip.vala"
2160 #line 518 "clip.vala"
2161 if (time_in_range (model_clip_get_end (self), model_clip_get_start (other), pad)) {
2163 result = model_clip_get_start (other) - model_clip_get_duration (self);
2164 #line 519 "clip.vala"
2168 #line 520 "clip.vala"
2169 if (time_in_range (model_clip_get_end (self), model_clip_get_end (other), pad)) {
2171 result = model_clip_get_end (other) - model_clip_get_duration (self);
2172 #line 521 "clip.vala"
2179 result = model_clip_get_start (self);
2180 #line 523 "clip.vala"
2186 #line 526 "clip.vala"
2187 gboolean model_clip_snap_coord (ModelClip* self, gint64* s, gint64 span) {
2189 gboolean result = FALSE;
2190 #line 526 "clip.vala"
2191 g_return_val_if_fail (MODEL_IS_CLIP (self), FALSE);
2192 #line 527 "clip.vala"
2193 if (time_in_range (*s, model_clip_get_start (self), span)) {
2194 #line 528 "clip.vala"
2195 *s = model_clip_get_start (self);
2198 #line 529 "clip.vala"
2202 #line 530 "clip.vala"
2203 if (time_in_range (*s, model_clip_get_end (self), span)) {
2204 #line 531 "clip.vala"
2205 *s = model_clip_get_end (self);
2208 #line 532 "clip.vala"
2214 #line 534 "clip.vala"
2220 #line 537 "clip.vala"
2221 ModelClip* model_clip_copy (ModelClip* self) {
2223 ModelClip* result = NULL;
2224 #line 537 "clip.vala"
2225 g_return_val_if_fail (MODEL_IS_CLIP (self), NULL);
2227 result = model_clip_new (self->clipfile, self->type, self->name, model_clip_get_start (self), model_clip_get_media_start (self), model_clip_get_duration (self), FALSE);
2228 #line 538 "clip.vala"
2234 #line 541 "clip.vala"
2235 gboolean model_clip_is_trimmed (ModelClip* self) {
2237 gboolean result = FALSE;
2238 #line 541 "clip.vala"
2239 g_return_val_if_fail (MODEL_IS_CLIP (self), FALSE);
2240 #line 542 "clip.vala"
2241 if (!model_clip_file_is_online (self->clipfile)) {
2244 #line 543 "clip.vala"
2248 result = model_clip_get_duration (self) != model_clip_file_get_length (self->clipfile);
2249 #line 544 "clip.vala"
2255 #line 547 "clip.vala"
2256 void model_clip_trim (ModelClip* self, gint64 delta, GdkWindowEdge edge) {
2257 #line 547 "clip.vala"
2258 g_return_if_fail (MODEL_IS_CLIP (self));
2259 #line 548 "clip.vala"
2262 case GDK_WINDOW_EDGE_WEST:
2264 #line 550 "clip.vala"
2265 if ((model_clip_get_media_start (self) + delta) < 0) {
2266 #line 551 "clip.vala"
2267 delta = -model_clip_get_media_start (self);
2270 #line 554 "clip.vala"
2271 if ((model_clip_get_duration (self) - delta) < 0) {
2272 #line 555 "clip.vala"
2273 delta = model_clip_get_duration (self);
2276 #line 558 "clip.vala"
2277 model_clip_set_start (self, model_clip_get_start (self) + delta);
2278 #line 559 "clip.vala"
2279 model_clip_set_media_start_duration (self, model_clip_get_media_start (self) + delta, model_clip_get_duration (self) - delta);
2280 #line 560 "clip.vala"
2284 case GDK_WINDOW_EDGE_EAST:
2286 #line 562 "clip.vala"
2287 model_clip_set_duration (self, model_clip_get_duration (self) + delta);
2288 #line 563 "clip.vala"
2296 #line 567 "clip.vala"
2297 void model_clip_set_media_start_duration (ModelClip* self, gint64 media_start, gint64 duration) {
2299 gboolean _tmp0_ = FALSE;
2300 #line 567 "clip.vala"
2301 g_return_if_fail (MODEL_IS_CLIP (self));
2302 #line 568 "clip.vala"
2303 if (media_start < 0) {
2304 #line 569 "clip.vala"
2305 media_start = (gint64) 0;
2308 #line 572 "clip.vala"
2310 #line 573 "clip.vala"
2311 duration = (gint64) 0;
2314 #line 576 "clip.vala"
2315 if (model_clip_file_is_online (self->clipfile)) {
2316 #line 576 "clip.vala"
2317 _tmp0_ = (media_start + duration) > model_clip_file_get_length (self->clipfile);
2320 #line 576 "clip.vala"
2324 #line 576 "clip.vala"
2326 #line 578 "clip.vala"
2327 media_start = model_clip_file_get_length (self->clipfile) - duration;
2330 #line 581 "clip.vala"
2331 self->priv->_media_start = media_start;
2332 #line 582 "clip.vala"
2333 self->priv->_duration = duration;
2334 #line 584 "clip.vala"
2335 if (self->priv->connected) {
2336 #line 585 "clip.vala"
2337 g_signal_emit_by_name (self, "media-start-changed", self->priv->_media_start);
2338 #line 586 "clip.vala"
2339 g_signal_emit_by_name (self, "duration-changed", self->priv->_duration);
2342 #line 589 "clip.vala"
2343 g_signal_emit_by_name (self, "moved", self);
2348 #line 592 "clip.vala"
2349 void model_clip_save (ModelClip* self, FILE* f, gint id) {
2350 #line 592 "clip.vala"
2351 g_return_if_fail (MODEL_IS_CLIP (self));
2352 #line 592 "clip.vala"
2353 g_return_if_fail (f != NULL);
2354 #line 593 "clip.vala"
2355 fprintf (f, " <clip id=\"%d\" name=\"%s\" start=\"%" G_GINT64_FORMAT "\" " "media-start=\"%" G_GINT64_FORMAT "\" duration=\"%" G_GINT64_FORMAT "\"/>\n", id, self->name, model_clip_get_start (self), model_clip_get_media_start (self), model_clip_get_duration (self));
2360 gint64 model_clip_get_start (ModelClip* self) {
2362 g_return_val_if_fail (MODEL_IS_CLIP (self), 0LL);
2363 result = self->priv->_start;
2364 #line 414 "clip.vala"
2370 void model_clip_set_start (ModelClip* self, gint64 value) {
2371 g_return_if_fail (MODEL_IS_CLIP (self));
2372 #line 418 "clip.vala"
2373 self->priv->_start = value;
2374 #line 419 "clip.vala"
2375 if (self->priv->connected) {
2376 #line 420 "clip.vala"
2377 g_signal_emit_by_name (self, "start-changed", self->priv->_start);
2380 #line 422 "clip.vala"
2381 g_signal_emit_by_name (self, "moved", self);
2383 g_object_notify ((GObject *) self, "start");
2387 gint64 model_clip_get_media_start (ModelClip* self) {
2389 g_return_val_if_fail (MODEL_IS_CLIP (self), 0LL);
2390 result = self->priv->_media_start;
2391 #line 429 "clip.vala"
2397 gint64 model_clip_get_duration (ModelClip* self) {
2399 g_return_val_if_fail (MODEL_IS_CLIP (self), 0LL);
2400 result = self->priv->_duration;
2401 #line 436 "clip.vala"
2407 void model_clip_set_duration (ModelClip* self, gint64 value) {
2408 g_return_if_fail (MODEL_IS_CLIP (self));
2409 #line 440 "clip.vala"
2411 #line 442 "clip.vala"
2415 #line 445 "clip.vala"
2416 if (!self->is_recording) {
2417 #line 446 "clip.vala"
2418 if ((value + self->priv->_media_start) > model_clip_file_get_length (self->clipfile)) {
2419 #line 448 "clip.vala"
2420 value = model_clip_file_get_length (self->clipfile) - model_clip_get_media_start (self);
2424 #line 452 "clip.vala"
2425 self->priv->_duration = value;
2426 #line 453 "clip.vala"
2427 if (self->priv->connected) {
2428 #line 454 "clip.vala"
2429 g_signal_emit_by_name (self, "duration-changed", self->priv->_duration);
2432 #line 456 "clip.vala"
2433 g_signal_emit_by_name (self, "moved", self);
2435 g_object_notify ((GObject *) self, "duration");
2439 gint64 model_clip_get_end (ModelClip* self) {
2441 g_return_val_if_fail (MODEL_IS_CLIP (self), 0LL);
2442 result = model_clip_get_start (self) + model_clip_get_duration (self);
2443 #line 463 "clip.vala"
2449 static void model_clip_class_init (ModelClipClass * klass) {
2450 model_clip_parent_class = g_type_class_peek_parent (klass);
2451 g_type_class_add_private (klass, sizeof (ModelClipPrivate));
2452 G_OBJECT_CLASS (klass)->get_property = model_clip_get_property;
2453 G_OBJECT_CLASS (klass)->set_property = model_clip_set_property;
2454 G_OBJECT_CLASS (klass)->finalize = model_clip_finalize;
2455 g_object_class_install_property (G_OBJECT_CLASS (klass), MODEL_CLIP_START, g_param_spec_int64 ("start", "start", "start", G_MININT64, G_MAXINT64, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
2456 g_object_class_install_property (G_OBJECT_CLASS (klass), MODEL_CLIP_MEDIA_START, g_param_spec_int64 ("media-start", "media-start", "media-start", G_MININT64, G_MAXINT64, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
2457 g_object_class_install_property (G_OBJECT_CLASS (klass), MODEL_CLIP_DURATION, g_param_spec_int64 ("duration", "duration", "duration", G_MININT64, G_MAXINT64, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
2458 g_object_class_install_property (G_OBJECT_CLASS (klass), MODEL_CLIP_END, g_param_spec_int64 ("end", "end", "end", G_MININT64, G_MAXINT64, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
2459 g_signal_new ("moved", MODEL_TYPE_CLIP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_CLIP);
2460 g_signal_new ("updated", MODEL_TYPE_CLIP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_CLIP);
2461 g_signal_new ("media_start_changed", MODEL_TYPE_CLIP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__INT64, G_TYPE_NONE, 1, G_TYPE_INT64);
2462 g_signal_new ("duration_changed", MODEL_TYPE_CLIP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__INT64, G_TYPE_NONE, 1, G_TYPE_INT64);
2463 g_signal_new ("start_changed", MODEL_TYPE_CLIP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__INT64, G_TYPE_NONE, 1, G_TYPE_INT64);
2464 g_signal_new ("removed", MODEL_TYPE_CLIP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_CLIP);
2468 static void model_clip_instance_init (ModelClip * self) {
2469 self->priv = MODEL_CLIP_GET_PRIVATE (self);
2473 static void model_clip_finalize (GObject* obj) {
2475 self = MODEL_CLIP (obj);
2476 _g_object_unref0 (self->clipfile);
2477 _g_free0 (self->name);
2478 G_OBJECT_CLASS (model_clip_parent_class)->finalize (obj);
2482 GType model_clip_get_type (void) {
2483 static volatile gsize model_clip_type_id__volatile = 0;
2484 if (g_once_init_enter (&model_clip_type_id__volatile)) {
2485 static const GTypeInfo g_define_type_info = { sizeof (ModelClipClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_clip_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelClip), 0, (GInstanceInitFunc) model_clip_instance_init, NULL };
2486 GType model_clip_type_id;
2487 model_clip_type_id = g_type_register_static (G_TYPE_OBJECT, "ModelClip", &g_define_type_info, 0);
2488 g_once_init_leave (&model_clip_type_id__volatile, model_clip_type_id);
2490 return model_clip_type_id__volatile;
2494 static void model_clip_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
2496 self = MODEL_CLIP (object);
2497 switch (property_id) {
2498 case MODEL_CLIP_START:
2499 g_value_set_int64 (value, model_clip_get_start (self));
2501 case MODEL_CLIP_MEDIA_START:
2502 g_value_set_int64 (value, model_clip_get_media_start (self));
2504 case MODEL_CLIP_DURATION:
2505 g_value_set_int64 (value, model_clip_get_duration (self));
2507 case MODEL_CLIP_END:
2508 g_value_set_int64 (value, model_clip_get_end (self));
2511 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
2517 static void model_clip_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
2519 self = MODEL_CLIP (object);
2520 switch (property_id) {
2521 case MODEL_CLIP_START:
2522 model_clip_set_start (self, g_value_get_int64 (value));
2524 case MODEL_CLIP_DURATION:
2525 model_clip_set_duration (self, g_value_get_int64 (value));
2528 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
2534 #line 601 "clip.vala"
2535 ModelFetcherCompletion* model_fetcher_completion_construct (GType object_type) {
2537 ModelFetcherCompletion* self;
2538 self = (ModelFetcherCompletion*) g_type_create_instance (object_type);
2543 #line 601 "clip.vala"
2544 ModelFetcherCompletion* model_fetcher_completion_new (void) {
2545 #line 601 "clip.vala"
2546 return model_fetcher_completion_construct (MODEL_TYPE_FETCHER_COMPLETION);
2551 #line 604 "clip.vala"
2552 static void model_fetcher_completion_real_complete (ModelFetcherCompletion* self, ModelFetcher* fetcher) {
2553 #line 604 "clip.vala"
2554 g_return_if_fail (MODEL_IS_FETCHER_COMPLETION (self));
2555 #line 604 "clip.vala"
2556 g_return_if_fail (MODEL_IS_FETCHER (fetcher));
2561 #line 604 "clip.vala"
2562 void model_fetcher_completion_complete (ModelFetcherCompletion* self, ModelFetcher* fetcher) {
2563 #line 604 "clip.vala"
2564 MODEL_FETCHER_COMPLETION_GET_CLASS (self)->complete (self, fetcher);
2569 static void model_value_fetcher_completion_init (GValue* value) {
2570 value->data[0].v_pointer = NULL;
2574 static void model_value_fetcher_completion_free_value (GValue* value) {
2575 if (value->data[0].v_pointer) {
2576 model_fetcher_completion_unref (value->data[0].v_pointer);
2581 static void model_value_fetcher_completion_copy_value (const GValue* src_value, GValue* dest_value) {
2582 if (src_value->data[0].v_pointer) {
2583 dest_value->data[0].v_pointer = model_fetcher_completion_ref (src_value->data[0].v_pointer);
2585 dest_value->data[0].v_pointer = NULL;
2590 static gpointer model_value_fetcher_completion_peek_pointer (const GValue* value) {
2591 return value->data[0].v_pointer;
2595 static gchar* model_value_fetcher_completion_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
2596 if (collect_values[0].v_pointer) {
2597 ModelFetcherCompletion* object;
2598 object = collect_values[0].v_pointer;
2599 if (object->parent_instance.g_class == NULL) {
2600 return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
2601 } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
2602 return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
2604 value->data[0].v_pointer = model_fetcher_completion_ref (object);
2606 value->data[0].v_pointer = NULL;
2612 static gchar* model_value_fetcher_completion_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
2613 ModelFetcherCompletion** object_p;
2614 object_p = collect_values[0].v_pointer;
2616 return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
2618 if (!value->data[0].v_pointer) {
2620 } else if (collect_flags && G_VALUE_NOCOPY_CONTENTS) {
2621 *object_p = value->data[0].v_pointer;
2623 *object_p = model_fetcher_completion_ref (value->data[0].v_pointer);
2629 GParamSpec* model_param_spec_fetcher_completion (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) {
2630 ModelParamSpecFetcherCompletion* spec;
2631 g_return_val_if_fail (g_type_is_a (object_type, MODEL_TYPE_FETCHER_COMPLETION), NULL);
2632 spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
2633 G_PARAM_SPEC (spec)->value_type = object_type;
2634 return G_PARAM_SPEC (spec);
2638 gpointer model_value_get_fetcher_completion (const GValue* value) {
2639 g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_FETCHER_COMPLETION), NULL);
2640 return value->data[0].v_pointer;
2644 void model_value_set_fetcher_completion (GValue* value, gpointer v_object) {
2645 ModelFetcherCompletion* old;
2646 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_FETCHER_COMPLETION));
2647 old = value->data[0].v_pointer;
2649 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_FETCHER_COMPLETION));
2650 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
2651 value->data[0].v_pointer = v_object;
2652 model_fetcher_completion_ref (value->data[0].v_pointer);
2654 value->data[0].v_pointer = NULL;
2657 model_fetcher_completion_unref (old);
2662 void model_value_take_fetcher_completion (GValue* value, gpointer v_object) {
2663 ModelFetcherCompletion* old;
2664 g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_FETCHER_COMPLETION));
2665 old = value->data[0].v_pointer;
2667 g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_FETCHER_COMPLETION));
2668 g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
2669 value->data[0].v_pointer = v_object;
2671 value->data[0].v_pointer = NULL;
2674 model_fetcher_completion_unref (old);
2679 static void model_fetcher_completion_class_init (ModelFetcherCompletionClass * klass) {
2680 model_fetcher_completion_parent_class = g_type_class_peek_parent (klass);
2681 MODEL_FETCHER_COMPLETION_CLASS (klass)->finalize = model_fetcher_completion_finalize;
2682 MODEL_FETCHER_COMPLETION_CLASS (klass)->complete = model_fetcher_completion_real_complete;
2686 static void model_fetcher_completion_instance_init (ModelFetcherCompletion * self) {
2687 self->ref_count = 1;
2691 static void model_fetcher_completion_finalize (ModelFetcherCompletion* obj) {
2692 ModelFetcherCompletion * self;
2693 self = MODEL_FETCHER_COMPLETION (obj);
2697 GType model_fetcher_completion_get_type (void) {
2698 static volatile gsize model_fetcher_completion_type_id__volatile = 0;
2699 if (g_once_init_enter (&model_fetcher_completion_type_id__volatile)) {
2700 static const GTypeValueTable g_define_type_value_table = { model_value_fetcher_completion_init, model_value_fetcher_completion_free_value, model_value_fetcher_completion_copy_value, model_value_fetcher_completion_peek_pointer, "p", model_value_fetcher_completion_collect_value, "p", model_value_fetcher_completion_lcopy_value };
2701 static const GTypeInfo g_define_type_info = { sizeof (ModelFetcherCompletionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_fetcher_completion_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelFetcherCompletion), 0, (GInstanceInitFunc) model_fetcher_completion_instance_init, &g_define_type_value_table };
2702 static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
2703 GType model_fetcher_completion_type_id;
2704 model_fetcher_completion_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ModelFetcherCompletion", &g_define_type_info, &g_define_type_fundamental_info, 0);
2705 g_once_init_leave (&model_fetcher_completion_type_id__volatile, model_fetcher_completion_type_id);
2707 return model_fetcher_completion_type_id__volatile;
2711 gpointer model_fetcher_completion_ref (gpointer instance) {
2712 ModelFetcherCompletion* self;
2714 g_atomic_int_inc (&self->ref_count);
2719 void model_fetcher_completion_unref (gpointer instance) {
2720 ModelFetcherCompletion* self;
2722 if (g_atomic_int_dec_and_test (&self->ref_count)) {
2723 MODEL_FETCHER_COMPLETION_GET_CLASS (self)->finalize (self);
2724 g_type_free_instance ((GTypeInstance *) self);
2730 static void g_cclosure_user_marshal_VOID__INT64 (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
2731 typedef void (*GMarshalFunc_VOID__INT64) (gpointer data1, gint64 arg_1, gpointer data2);
2732 register GMarshalFunc_VOID__INT64 callback;
2733 register GCClosure * cc;
2734 register gpointer data1, data2;
2735 cc = (GCClosure *) closure;
2736 g_return_if_fail (n_param_values == 2);
2737 if (G_CCLOSURE_SWAP_DATA (closure)) {
2738 data1 = closure->data;
2739 data2 = param_values->data[0].v_pointer;
2741 data1 = param_values->data[0].v_pointer;
2742 data2 = closure->data;
2744 callback = (GMarshalFunc_VOID__INT64) (marshal_data ? marshal_data : cc->callback);
2745 callback (data1, g_value_get_int64 (param_values + 1), data2);