Initial commit
[fillmore] / src / marina / marina / video_track.c
diff --git a/src/marina/marina/video_track.c b/src/marina/marina/video_track.c
new file mode 100644 (file)
index 0000000..ea18f10
--- /dev/null
@@ -0,0 +1,571 @@
+/* video_track.c generated by valac, the Vala compiler
+ * generated from video_track.vala, do not modify */
+
+/* Copyright 2009 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later).  See the COPYING file in this distribution. 
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <gee.h>
+#include <gst/gst.h>
+#include <float.h>
+#include <math.h>
+
+
+#define MODEL_TYPE_TRACK (model_track_get_type ())
+#define MODEL_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRACK, ModelTrack))
+#define MODEL_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRACK, ModelTrackClass))
+#define MODEL_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRACK))
+#define MODEL_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRACK))
+#define MODEL_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRACK, ModelTrackClass))
+
+typedef struct _ModelTrack ModelTrack;
+typedef struct _ModelTrackClass ModelTrackClass;
+typedef struct _ModelTrackPrivate ModelTrackPrivate;
+
+#define MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ())
+
+#define MODEL_TYPE_CLIP (model_clip_get_type ())
+#define MODEL_CLIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP, ModelClip))
+#define MODEL_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP, ModelClipClass))
+#define MODEL_IS_CLIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP))
+#define MODEL_IS_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP))
+#define MODEL_CLIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP, ModelClipClass))
+
+typedef struct _ModelClip ModelClip;
+typedef struct _ModelClipClass ModelClipClass;
+
+#define MODEL_TYPE_PROJECT (model_project_get_type ())
+#define MODEL_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT, ModelProject))
+#define MODEL_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT, ModelProjectClass))
+#define MODEL_IS_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT))
+#define MODEL_IS_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT))
+#define MODEL_PROJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT, ModelProjectClass))
+
+typedef struct _ModelProject ModelProject;
+typedef struct _ModelProjectClass ModelProjectClass;
+
+#define MODEL_TYPE_VIDEO_TRACK (model_video_track_get_type ())
+#define MODEL_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_VIDEO_TRACK, ModelVideoTrack))
+#define MODEL_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_VIDEO_TRACK, ModelVideoTrackClass))
+#define MODEL_IS_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_VIDEO_TRACK))
+#define MODEL_IS_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_VIDEO_TRACK))
+#define MODEL_VIDEO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_VIDEO_TRACK, ModelVideoTrackClass))
+
+typedef struct _ModelVideoTrack ModelVideoTrack;
+typedef struct _ModelVideoTrackClass ModelVideoTrackClass;
+typedef struct _ModelVideoTrackPrivate ModelVideoTrackPrivate;
+
+#define TYPE_FRACTION (fraction_get_type ())
+typedef struct _Fraction Fraction;
+typedef struct _ModelClipPrivate ModelClipPrivate;
+
+#define MODEL_TYPE_CLIP_FILE (model_clip_file_get_type ())
+#define MODEL_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFile))
+#define MODEL_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
+#define MODEL_IS_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE))
+#define MODEL_IS_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE))
+#define MODEL_CLIP_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFileClass))
+
+typedef struct _ModelClipFile ModelClipFile;
+typedef struct _ModelClipFileClass ModelClipFileClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define MODEL_TYPE_TEMPO_INFORMATION (model_tempo_information_get_type ())
+#define MODEL_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformation))
+#define MODEL_IS_TEMPO_INFORMATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TEMPO_INFORMATION))
+#define MODEL_TEMPO_INFORMATION_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TEMPO_INFORMATION, ModelTempoInformationIface))
+
+typedef struct _ModelTempoInformation ModelTempoInformation;
+typedef struct _ModelTempoInformationIface ModelTempoInformationIface;
+typedef struct _ModelProjectPrivate ModelProjectPrivate;
+
+#define TYPE_TIME_CODE (time_code_get_type ())
+typedef struct _TimeCode TimeCode;
+
+#define VIEW_TYPE_MEDIA_ENGINE (view_media_engine_get_type ())
+#define VIEW_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngine))
+#define VIEW_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
+#define VIEW_IS_MEDIA_ENGINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_ENGINE))
+#define VIEW_IS_MEDIA_ENGINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_ENGINE))
+#define VIEW_MEDIA_ENGINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEngineClass))
+
+typedef struct _ViewMediaEngine ViewMediaEngine;
+typedef struct _ViewMediaEngineClass ViewMediaEngineClass;
+
+#define MODEL_TYPE_PROJECT_LOADER (model_project_loader_get_type ())
+#define MODEL_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoader))
+#define MODEL_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
+#define MODEL_IS_PROJECT_LOADER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_PROJECT_LOADER))
+#define MODEL_IS_PROJECT_LOADER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_PROJECT_LOADER))
+#define MODEL_PROJECT_LOADER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_PROJECT_LOADER, ModelProjectLoaderClass))
+
+typedef struct _ModelProjectLoader ModelProjectLoader;
+typedef struct _ModelProjectLoaderClass ModelProjectLoaderClass;
+
+#define MODEL_TYPE_UNDO_MANAGER (model_undo_manager_get_type ())
+#define MODEL_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManager))
+#define MODEL_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
+#define MODEL_IS_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_UNDO_MANAGER))
+#define MODEL_IS_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_UNDO_MANAGER))
+#define MODEL_UNDO_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass))
+
+typedef struct _ModelUndoManager ModelUndoManager;
+typedef struct _ModelUndoManagerClass ModelUndoManagerClass;
+
+#define MODEL_TYPE_LIBRARY_IMPORTER (model_library_importer_get_type ())
+#define MODEL_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporter))
+#define MODEL_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
+#define MODEL_IS_LIBRARY_IMPORTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_LIBRARY_IMPORTER))
+#define MODEL_IS_LIBRARY_IMPORTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_LIBRARY_IMPORTER))
+#define MODEL_LIBRARY_IMPORTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_LIBRARY_IMPORTER, ModelLibraryImporterClass))
+
+typedef struct _ModelLibraryImporter ModelLibraryImporter;
+typedef struct _ModelLibraryImporterClass ModelLibraryImporterClass;
+
+typedef enum  {
+       MODEL_MEDIA_TYPE_AUDIO,
+       MODEL_MEDIA_TYPE_VIDEO
+} ModelMediaType;
+
+struct _ModelTrack {
+       GObject parent_instance;
+       ModelTrackPrivate * priv;
+       ModelProject* project;
+       GeeArrayList* clips;
+       char* display_name;
+};
+
+struct _ModelTrackClass {
+       GObjectClass parent_class;
+       char* (*name) (ModelTrack* self);
+       ModelMediaType (*media_type) (ModelTrack* self);
+       gboolean (*check) (ModelTrack* self, ModelClip* clip);
+       void (*on_clip_updated) (ModelTrack* self, ModelClip* clip);
+       void (*write_attributes) (ModelTrack* self, FILE* f);
+};
+
+struct _ModelVideoTrack {
+       ModelTrack parent_instance;
+       ModelVideoTrackPrivate * priv;
+};
+
+struct _ModelVideoTrackClass {
+       ModelTrackClass parent_class;
+};
+
+struct _Fraction {
+       gint numerator;
+       gint denominator;
+};
+
+struct _ModelClip {
+       GObject parent_instance;
+       ModelClipPrivate * priv;
+       ModelClipFile* clipfile;
+       ModelMediaType type;
+       gboolean is_recording;
+       char* name;
+};
+
+struct _ModelClipClass {
+       GObjectClass parent_class;
+};
+
+struct _ModelTempoInformationIface {
+       GTypeInterface parent_iface;
+       void (*get_time_signature) (ModelTempoInformation* self, Fraction* result);
+       gint (*get_bpm) (ModelTempoInformation* self);
+};
+
+struct _TimeCode {
+       gint hour;
+       gint minute;
+       gint second;
+       gint frame;
+       gboolean drop_code;
+};
+
+struct _ModelProject {
+       GObject parent_instance;
+       ModelProjectPrivate * priv;
+       GeeArrayList* tracks;
+       GeeArrayList* inactive_tracks;
+       GeeArrayList* clipfiles;
+       ViewMediaEngine* media_engine;
+       char* project_file;
+       ModelProjectLoader* loader;
+       ModelUndoManager* undo_manager;
+       ModelLibraryImporter* importer;
+       Fraction default_framerate;
+       gboolean click_during_play;
+       gboolean click_during_record;
+       double click_volume;
+       gboolean library_visible;
+       gint library_width;
+       gboolean snap_to_clip;
+};
+
+struct _ModelProjectClass {
+       GObjectClass parent_class;
+       void (*get_clip_time) (ModelProject* self, ModelClipFile* f, TimeCode* result);
+       char* (*get_project_file) (ModelProject* self);
+       void (*do_append) (ModelProject* self, ModelTrack* track, ModelClipFile* clipfile, const char* name, gint64 insert_time);
+       void (*add_track) (ModelProject* self, ModelTrack* track);
+       void (*insert_track) (ModelProject* self, gint index, ModelTrack* track);
+       void (*load) (ModelProject* self, const char* fname);
+       void (*save) (ModelProject* self, const char* filename);
+       char* (*get_app_name) (ModelProject* self);
+       void (*load_complete) (ModelProject* self);
+};
+
+
+extern Fraction model_project_INVALID_FRAME_RATE;
+static gpointer model_video_track_parent_class = NULL;
+
+GType model_track_get_type (void);
+GType model_media_type_get_type (void);
+GType model_clip_get_type (void);
+GType model_project_get_type (void);
+GType model_video_track_get_type (void);
+enum  {
+       MODEL_VIDEO_TRACK_DUMMY_PROPERTY
+};
+ModelTrack* model_track_construct (GType object_type, ModelProject* project, const char* display_name);
+ModelVideoTrack* model_video_track_new (ModelProject* project);
+ModelVideoTrack* model_video_track_construct (GType object_type, ModelProject* project);
+static char* model_video_track_real_name (ModelTrack* base);
+static ModelMediaType model_video_track_real_media_type (ModelTrack* base);
+GType fraction_get_type (void);
+Fraction* fraction_dup (const Fraction* self);
+void fraction_free (Fraction* self);
+GType model_clip_file_get_type (void);
+gboolean model_clip_file_is_online (ModelClipFile* self);
+gboolean model_video_track_get_framerate (ModelVideoTrack* self, Fraction* rate);
+gboolean model_clip_file_get_frame_rate (ModelClipFile* self, Fraction* rate);
+gboolean fraction_equal (Fraction *self, Fraction* f);
+static gboolean model_video_track_real_check (ModelTrack* base, ModelClip* clip);
+static gint64 model_video_track_frame_to_time (ModelVideoTrack* self, gint frame);
+gint time_to_frame_with_rate (gint64 time, Fraction* rate);
+static gint model_video_track_time_to_frame (ModelVideoTrack* self, gint64 time);
+gint model_video_track_get_current_frame (ModelVideoTrack* self, gint64 time);
+gint64 model_video_track_previous_frame (ModelVideoTrack* self, gint64 position);
+gint64 model_video_track_next_frame (ModelVideoTrack* self, gint64 position);
+GType model_tempo_information_get_type (void);
+GType time_code_get_type (void);
+TimeCode* time_code_dup (const TimeCode* self);
+void time_code_free (TimeCode* self);
+GType view_media_engine_get_type (void);
+GType model_project_loader_get_type (void);
+gpointer model_undo_manager_ref (gpointer instance);
+void model_undo_manager_unref (gpointer instance);
+GParamSpec* model_param_spec_undo_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags);
+void model_value_set_undo_manager (GValue* value, gpointer v_object);
+void model_value_take_undo_manager (GValue* value, gpointer v_object);
+gpointer model_value_get_undo_manager (const GValue* value);
+GType model_undo_manager_get_type (void);
+GType model_library_importer_get_type (void);
+
+
+
+#line 11 "video_track.vala"
+ModelVideoTrack* model_video_track_construct (GType object_type, ModelProject* project) {
+#line 280 "video_track.c"
+       ModelVideoTrack * self;
+#line 11 "video_track.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL);
+#line 12 "video_track.vala"
+       self = (ModelVideoTrack*) model_track_construct (object_type, project, "Video Track");
+#line 286 "video_track.c"
+       return self;
+}
+
+
+#line 11 "video_track.vala"
+ModelVideoTrack* model_video_track_new (ModelProject* project) {
+#line 11 "video_track.vala"
+       return model_video_track_construct (MODEL_TYPE_VIDEO_TRACK, project);
+#line 295 "video_track.c"
+}
+
+
+#line 15 "video_track.vala"
+static char* model_video_track_real_name (ModelTrack* base) {
+#line 301 "video_track.c"
+       ModelVideoTrack * self;
+       char* result = NULL;
+       self = MODEL_VIDEO_TRACK (base);
+       result = g_strdup ("video");
+#line 15 "video_track.vala"
+       return result;
+#line 308 "video_track.c"
+}
+
+
+#line 17 "video_track.vala"
+static ModelMediaType model_video_track_real_media_type (ModelTrack* base) {
+#line 314 "video_track.c"
+       ModelVideoTrack * self;
+       ModelMediaType result = 0;
+       self = MODEL_VIDEO_TRACK (base);
+       result = MODEL_MEDIA_TYPE_VIDEO;
+#line 18 "video_track.vala"
+       return result;
+#line 321 "video_track.c"
+}
+
+
+#line 21 "video_track.vala"
+static gboolean model_video_track_real_check (ModelTrack* base, ModelClip* clip) {
+#line 327 "video_track.c"
+       ModelVideoTrack * self;
+       gboolean result = FALSE;
+       Fraction rate1 = {0};
+       Fraction rate2 = {0};
+       self = MODEL_VIDEO_TRACK (base);
+#line 21 "video_track.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), FALSE);
+#line 25 "video_track.vala"
+       if (!model_clip_file_is_online (clip->clipfile)) {
+#line 337 "video_track.c"
+               result = TRUE;
+#line 26 "video_track.vala"
+               return result;
+#line 341 "video_track.c"
+       }
+#line 28 "video_track.vala"
+       if (gee_collection_get_size (GEE_COLLECTION (MODEL_TRACK (self)->clips)) == 0) {
+#line 345 "video_track.c"
+               result = TRUE;
+#line 29 "video_track.vala"
+               return result;
+#line 349 "video_track.c"
+       }
+#line 31 "video_track.vala"
+       if (!model_video_track_get_framerate (self, &rate2)) {
+#line 32 "video_track.vala"
+               g_signal_emit_by_name (MODEL_TRACK (self), "error-occurred", "Cannot get initial frame rate!", NULL);
+#line 355 "video_track.c"
+               result = FALSE;
+#line 33 "video_track.vala"
+               return result;
+#line 359 "video_track.c"
+       }
+#line 36 "video_track.vala"
+       if (!model_clip_file_get_frame_rate (clip->clipfile, &rate1)) {
+#line 37 "video_track.vala"
+               g_signal_emit_by_name (MODEL_TRACK (self), "error-occurred", "can't get frame rate", NULL);
+#line 365 "video_track.c"
+               result = FALSE;
+#line 38 "video_track.vala"
+               return result;
+#line 369 "video_track.c"
+       }
+#line 41 "video_track.vala"
+       if (!fraction_equal (&rate1, &rate2)) {
+#line 42 "video_track.vala"
+               g_signal_emit_by_name (MODEL_TRACK (self), "error-occurred", "can't insert clip with different frame rate", NULL);
+#line 375 "video_track.c"
+               result = FALSE;
+#line 43 "video_track.vala"
+               return result;
+#line 379 "video_track.c"
+       }
+       result = TRUE;
+#line 45 "video_track.vala"
+       return result;
+#line 384 "video_track.c"
+}
+
+
+#line 63 "video_track.vala"
+static gint64 model_video_track_frame_to_time (ModelVideoTrack* self, gint frame) {
+#line 390 "video_track.c"
+       gint64 result = 0LL;
+       Fraction rate = {0};
+#line 63 "video_track.vala"
+       g_return_val_if_fail (MODEL_IS_VIDEO_TRACK (self), 0LL);
+#line 65 "video_track.vala"
+       if (!model_video_track_get_framerate (self, &rate)) {
+#line 397 "video_track.c"
+               result = (gint64) 0;
+#line 66 "video_track.vala"
+               return result;
+#line 401 "video_track.c"
+       }
+       result = (gint64) gst_util_uint64_scale ((guint64) frame, (guint64) (GST_SECOND * rate.denominator), (guint64) rate.numerator);
+#line 68 "video_track.vala"
+       return result;
+#line 406 "video_track.c"
+}
+
+
+#line 71 "video_track.vala"
+static gint model_video_track_time_to_frame (ModelVideoTrack* self, gint64 time) {
+#line 412 "video_track.c"
+       gint result = 0;
+       Fraction rate = {0};
+#line 71 "video_track.vala"
+       g_return_val_if_fail (MODEL_IS_VIDEO_TRACK (self), 0);
+#line 73 "video_track.vala"
+       if (!model_video_track_get_framerate (self, &rate)) {
+#line 419 "video_track.c"
+               result = 0;
+#line 74 "video_track.vala"
+               return result;
+#line 423 "video_track.c"
+       }
+       result = time_to_frame_with_rate (time, &rate);
+#line 75 "video_track.vala"
+       return result;
+#line 428 "video_track.c"
+}
+
+
+#line 78 "video_track.vala"
+gint model_video_track_get_current_frame (ModelVideoTrack* self, gint64 time) {
+#line 434 "video_track.c"
+       gint result = 0;
+#line 78 "video_track.vala"
+       g_return_val_if_fail (MODEL_IS_VIDEO_TRACK (self), 0);
+#line 438 "video_track.c"
+       result = model_video_track_time_to_frame (self, time);
+#line 79 "video_track.vala"
+       return result;
+#line 442 "video_track.c"
+}
+
+
+#line 82 "video_track.vala"
+gint64 model_video_track_previous_frame (ModelVideoTrack* self, gint64 position) {
+#line 448 "video_track.c"
+       gint64 result = 0LL;
+       gint frame;
+#line 82 "video_track.vala"
+       g_return_val_if_fail (MODEL_IS_VIDEO_TRACK (self), 0LL);
+#line 83 "video_track.vala"
+       frame = model_video_track_time_to_frame (self, position);
+#line 455 "video_track.c"
+       result = model_video_track_frame_to_time (self, frame - 1);
+#line 84 "video_track.vala"
+       return result;
+#line 459 "video_track.c"
+}
+
+
+#line 87 "video_track.vala"
+gint64 model_video_track_next_frame (ModelVideoTrack* self, gint64 position) {
+#line 465 "video_track.c"
+       gint64 result = 0LL;
+       gint frame;
+#line 87 "video_track.vala"
+       g_return_val_if_fail (MODEL_IS_VIDEO_TRACK (self), 0LL);
+#line 88 "video_track.vala"
+       frame = model_video_track_time_to_frame (self, position);
+#line 472 "video_track.c"
+       result = model_video_track_frame_to_time (self, frame + 1);
+#line 89 "video_track.vala"
+       return result;
+#line 476 "video_track.c"
+}
+
+
+#line 92 "video_track.vala"
+gboolean model_video_track_get_framerate (ModelVideoTrack* self, Fraction* rate) {
+#line 482 "video_track.c"
+       gboolean result = FALSE;
+#line 92 "video_track.vala"
+       g_return_val_if_fail (MODEL_IS_VIDEO_TRACK (self), FALSE);
+#line 93 "video_track.vala"
+       if (gee_collection_get_size (GEE_COLLECTION (MODEL_TRACK (self)->clips)) == 0) {
+#line 488 "video_track.c"
+               result = FALSE;
+#line 94 "video_track.vala"
+               return result;
+#line 492 "video_track.c"
+       }
+       {
+               GeeIterator* _c_it;
+               _c_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (MODEL_TRACK (self)->clips));
+#line 96 "video_track.vala"
+               while (TRUE) {
+#line 499 "video_track.c"
+                       ModelClip* c;
+#line 96 "video_track.vala"
+                       if (!gee_iterator_next (_c_it)) {
+#line 96 "video_track.vala"
+                               break;
+#line 505 "video_track.c"
+                       }
+#line 96 "video_track.vala"
+                       c = (ModelClip*) gee_iterator_get (_c_it);
+#line 97 "video_track.vala"
+                       if (model_clip_file_is_online (c->clipfile)) {
+#line 511 "video_track.c"
+                               gboolean can;
+#line 98 "video_track.vala"
+                               can = model_clip_file_get_frame_rate (c->clipfile, rate);
+#line 99 "video_track.vala"
+                               g_assert (can);
+#line 517 "video_track.c"
+                               result = can;
+                               _g_object_unref0 (c);
+                               _g_object_unref0 (_c_it);
+#line 101 "video_track.vala"
+                               return result;
+#line 523 "video_track.c"
+                       }
+                       _g_object_unref0 (c);
+               }
+               _g_object_unref0 (_c_it);
+       }
+#line 105 "video_track.vala"
+       if (fraction_equal (&MODEL_TRACK (self)->project->default_framerate, &model_project_INVALID_FRAME_RATE)) {
+#line 531 "video_track.c"
+               result = FALSE;
+#line 106 "video_track.vala"
+               return result;
+#line 535 "video_track.c"
+       }
+#line 108 "video_track.vala"
+       *rate = MODEL_TRACK (self)->project->default_framerate;
+#line 539 "video_track.c"
+       result = TRUE;
+#line 109 "video_track.vala"
+       return result;
+#line 543 "video_track.c"
+}
+
+
+static void model_video_track_class_init (ModelVideoTrackClass * klass) {
+       model_video_track_parent_class = g_type_class_peek_parent (klass);
+       MODEL_TRACK_CLASS (klass)->name = model_video_track_real_name;
+       MODEL_TRACK_CLASS (klass)->media_type = model_video_track_real_media_type;
+       MODEL_TRACK_CLASS (klass)->check = model_video_track_real_check;
+}
+
+
+static void model_video_track_instance_init (ModelVideoTrack * self) {
+}
+
+
+GType model_video_track_get_type (void) {
+       static volatile gsize model_video_track_type_id__volatile = 0;
+       if (g_once_init_enter (&model_video_track_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ModelVideoTrackClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_video_track_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelVideoTrack), 0, (GInstanceInitFunc) model_video_track_instance_init, NULL };
+               GType model_video_track_type_id;
+               model_video_track_type_id = g_type_register_static (MODEL_TYPE_TRACK, "ModelVideoTrack", &g_define_type_info, 0);
+               g_once_init_leave (&model_video_track_type_id__volatile, model_video_track_type_id);
+       }
+       return model_video_track_type_id__volatile;
+}
+
+
+
+