Initial commit
[fillmore] / src / marina / marina / MediaEngine.c
diff --git a/src/marina/marina/MediaEngine.c b/src/marina/marina/MediaEngine.c
new file mode 100644 (file)
index 0000000..47ab326
--- /dev/null
@@ -0,0 +1,5111 @@
+/* MediaEngine.c generated by valac, the Vala compiler
+ * generated from MediaEngine.vala, do not modify */
+
+/* Copyright 2009-2010 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 <gst/gst.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+#include <gst/controller/gstcontroller.h>
+#include <float.h>
+#include <math.h>
+#include <stdio.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+#include <gdk/gdk.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+#include <X11/Xregion.h>
+#include <gst/interfaces/xoverlay.h>
+#include <glib/gstdio.h>
+
+
+#define TYPE_PLAY_STATE (play_state_get_type ())
+
+#define VIEW_TYPE_MEDIA_CLIP (view_media_clip_get_type ())
+#define VIEW_MEDIA_CLIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_CLIP, ViewMediaClip))
+#define VIEW_MEDIA_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_CLIP, ViewMediaClipClass))
+#define VIEW_IS_MEDIA_CLIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_CLIP))
+#define VIEW_IS_MEDIA_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_CLIP))
+#define VIEW_MEDIA_CLIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_CLIP, ViewMediaClipClass))
+
+typedef struct _ViewMediaClip ViewMediaClip;
+typedef struct _ViewMediaClipClass ViewMediaClipClass;
+typedef struct _ViewMediaClipPrivate ViewMediaClipPrivate;
+
+#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 _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
+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 MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ())
+
+#define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
+
+#define LOGGING_TYPE_LEVEL (logging_level_get_type ())
+
+#define TYPE_SINGLE_DECODE_BIN (single_decode_bin_get_type ())
+#define SINGLE_DECODE_BIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_SINGLE_DECODE_BIN, SingleDecodeBin))
+#define SINGLE_DECODE_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_SINGLE_DECODE_BIN, SingleDecodeBinClass))
+#define IS_SINGLE_DECODE_BIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_SINGLE_DECODE_BIN))
+#define IS_SINGLE_DECODE_BIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_SINGLE_DECODE_BIN))
+#define SINGLE_DECODE_BIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_SINGLE_DECODE_BIN, SingleDecodeBinClass))
+
+typedef struct _SingleDecodeBin SingleDecodeBin;
+typedef struct _SingleDecodeBinClass SingleDecodeBinClass;
+#define _gst_caps_unref0(var) ((var == NULL) ? NULL : (var = (gst_caps_unref (var), NULL)))
+
+#define VIEW_TYPE_MEDIA_AUDIO_CLIP (view_media_audio_clip_get_type ())
+#define VIEW_MEDIA_AUDIO_CLIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_AUDIO_CLIP, ViewMediaAudioClip))
+#define VIEW_MEDIA_AUDIO_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_AUDIO_CLIP, ViewMediaAudioClipClass))
+#define VIEW_IS_MEDIA_AUDIO_CLIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_AUDIO_CLIP))
+#define VIEW_IS_MEDIA_AUDIO_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_AUDIO_CLIP))
+#define VIEW_MEDIA_AUDIO_CLIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_AUDIO_CLIP, ViewMediaAudioClipClass))
+
+typedef struct _ViewMediaAudioClip ViewMediaAudioClip;
+typedef struct _ViewMediaAudioClipClass ViewMediaAudioClipClass;
+typedef struct _ViewMediaAudioClipPrivate ViewMediaAudioClipPrivate;
+
+#define VIEW_TYPE_MEDIA_VIDEO_CLIP (view_media_video_clip_get_type ())
+#define VIEW_MEDIA_VIDEO_CLIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_VIDEO_CLIP, ViewMediaVideoClip))
+#define VIEW_MEDIA_VIDEO_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_VIDEO_CLIP, ViewMediaVideoClipClass))
+#define VIEW_IS_MEDIA_VIDEO_CLIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_VIDEO_CLIP))
+#define VIEW_IS_MEDIA_VIDEO_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_VIDEO_CLIP))
+#define VIEW_MEDIA_VIDEO_CLIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_VIDEO_CLIP, ViewMediaVideoClipClass))
+
+typedef struct _ViewMediaVideoClip ViewMediaVideoClip;
+typedef struct _ViewMediaVideoClipClass ViewMediaVideoClipClass;
+typedef struct _ViewMediaVideoClipPrivate ViewMediaVideoClipPrivate;
+
+#define VIEW_TYPE_MEDIA_TRACK (view_media_track_get_type ())
+#define VIEW_MEDIA_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_TRACK, ViewMediaTrack))
+#define VIEW_MEDIA_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_TRACK, ViewMediaTrackClass))
+#define VIEW_IS_MEDIA_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_TRACK))
+#define VIEW_IS_MEDIA_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_TRACK))
+#define VIEW_MEDIA_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_TRACK, ViewMediaTrackClass))
+
+typedef struct _ViewMediaTrack ViewMediaTrack;
+typedef struct _ViewMediaTrackClass ViewMediaTrackClass;
+typedef struct _ViewMediaTrackPrivate ViewMediaTrackPrivate;
+
+#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 _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#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;
+
+#define TYPE_MULTI_FILE_PROGRESS_INTERFACE (multi_file_progress_interface_get_type ())
+#define MULTI_FILE_PROGRESS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MULTI_FILE_PROGRESS_INTERFACE, MultiFileProgressInterface))
+#define IS_MULTI_FILE_PROGRESS_INTERFACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MULTI_FILE_PROGRESS_INTERFACE))
+#define MULTI_FILE_PROGRESS_INTERFACE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_MULTI_FILE_PROGRESS_INTERFACE, MultiFileProgressInterfaceIface))
+
+typedef struct _MultiFileProgressInterface MultiFileProgressInterface;
+typedef struct _MultiFileProgressInterfaceIface MultiFileProgressInterfaceIface;
+typedef struct _ViewMediaEnginePrivate ViewMediaEnginePrivate;
+
+#define MODEL_TYPE_AUDIO_TRACK (model_audio_track_get_type ())
+#define MODEL_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrack))
+#define MODEL_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass))
+#define MODEL_IS_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_AUDIO_TRACK))
+#define MODEL_IS_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_AUDIO_TRACK))
+#define MODEL_AUDIO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass))
+
+typedef struct _ModelAudioTrack ModelAudioTrack;
+typedef struct _ModelAudioTrackClass ModelAudioTrackClass;
+typedef struct _ModelClipFilePrivate ModelClipFilePrivate;
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+
+#define VIEW_TYPE_MEDIA_VIDEO_TRACK (view_media_video_track_get_type ())
+#define VIEW_MEDIA_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_VIDEO_TRACK, ViewMediaVideoTrack))
+#define VIEW_MEDIA_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_VIDEO_TRACK, ViewMediaVideoTrackClass))
+#define VIEW_IS_MEDIA_VIDEO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_VIDEO_TRACK))
+#define VIEW_IS_MEDIA_VIDEO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_VIDEO_TRACK))
+#define VIEW_MEDIA_VIDEO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_VIDEO_TRACK, ViewMediaVideoTrackClass))
+
+typedef struct _ViewMediaVideoTrack ViewMediaVideoTrack;
+typedef struct _ViewMediaVideoTrackClass ViewMediaVideoTrackClass;
+typedef struct _ViewMediaVideoTrackPrivate ViewMediaVideoTrackPrivate;
+
+#define VIEW_TYPE_CLICK_TRACK (view_click_track_get_type ())
+#define VIEW_CLICK_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_CLICK_TRACK, ViewClickTrack))
+#define VIEW_CLICK_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_CLICK_TRACK, ViewClickTrackClass))
+#define VIEW_IS_CLICK_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_CLICK_TRACK))
+#define VIEW_IS_CLICK_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_CLICK_TRACK))
+#define VIEW_CLICK_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_CLICK_TRACK, ViewClickTrackClass))
+
+typedef struct _ViewClickTrack ViewClickTrack;
+typedef struct _ViewClickTrackClass ViewClickTrackClass;
+typedef struct _ViewClickTrackPrivate ViewClickTrackPrivate;
+
+#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_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;
+
+#define TYPE_FRACTION (fraction_get_type ())
+typedef struct _Fraction Fraction;
+typedef struct _ModelProjectPrivate ModelProjectPrivate;
+
+#define TYPE_TIME_CODE (time_code_get_type ())
+typedef struct _TimeCode TimeCode;
+
+#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;
+#define __g_list_free_g_free0(var) ((var == NULL) ? NULL : (var = (_g_list_free_g_free (var), NULL)))
+
+#define VIEW_TYPE_MEDIA_AUDIO_TRACK (view_media_audio_track_get_type ())
+#define VIEW_MEDIA_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_AUDIO_TRACK, ViewMediaAudioTrack))
+#define VIEW_MEDIA_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_AUDIO_TRACK, ViewMediaAudioTrackClass))
+#define VIEW_IS_MEDIA_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_AUDIO_TRACK))
+#define VIEW_IS_MEDIA_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_AUDIO_TRACK))
+#define VIEW_MEDIA_AUDIO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_AUDIO_TRACK, ViewMediaAudioTrackClass))
+
+typedef struct _ViewMediaAudioTrack ViewMediaAudioTrack;
+typedef struct _ViewMediaAudioTrackClass ViewMediaAudioTrackClass;
+typedef struct _ViewMediaAudioTrackPrivate ViewMediaAudioTrackPrivate;
+
+#define MODEL_TYPE_PARAMETER (model_parameter_get_type ())
+
+#define VIEW_TYPE_MEDIA_CONNECTOR (view_media_connector_get_type ())
+#define VIEW_MEDIA_CONNECTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_MEDIA_CONNECTOR, ViewMediaConnector))
+#define VIEW_MEDIA_CONNECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_MEDIA_CONNECTOR, ViewMediaConnectorClass))
+#define VIEW_IS_MEDIA_CONNECTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_MEDIA_CONNECTOR))
+#define VIEW_IS_MEDIA_CONNECTOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_MEDIA_CONNECTOR))
+#define VIEW_MEDIA_CONNECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_MEDIA_CONNECTOR, ViewMediaConnectorClass))
+
+typedef struct _ViewMediaConnector ViewMediaConnector;
+typedef struct _ViewMediaConnectorClass ViewMediaConnectorClass;
+typedef struct _ViewMediaConnectorPrivate ViewMediaConnectorPrivate;
+
+#define VIEW_MEDIA_CONNECTOR_TYPE_MEDIA_TYPES (view_media_connector_media_types_get_type ())
+
+#define VIEW_TYPE_VIDEO_OUTPUT (view_video_output_get_type ())
+#define VIEW_VIDEO_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_VIDEO_OUTPUT, ViewVideoOutput))
+#define VIEW_VIDEO_OUTPUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_VIDEO_OUTPUT, ViewVideoOutputClass))
+#define VIEW_IS_VIDEO_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_VIDEO_OUTPUT))
+#define VIEW_IS_VIDEO_OUTPUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_VIDEO_OUTPUT))
+#define VIEW_VIDEO_OUTPUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_VIDEO_OUTPUT, ViewVideoOutputClass))
+
+typedef struct _ViewVideoOutput ViewVideoOutput;
+typedef struct _ViewVideoOutputClass ViewVideoOutputClass;
+typedef struct _ViewVideoOutputPrivate ViewVideoOutputPrivate;
+
+#define VIEW_TYPE_AUDIO_OUTPUT (view_audio_output_get_type ())
+#define VIEW_AUDIO_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_AUDIO_OUTPUT, ViewAudioOutput))
+#define VIEW_AUDIO_OUTPUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_AUDIO_OUTPUT, ViewAudioOutputClass))
+#define VIEW_IS_AUDIO_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_AUDIO_OUTPUT))
+#define VIEW_IS_AUDIO_OUTPUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_AUDIO_OUTPUT))
+#define VIEW_AUDIO_OUTPUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_AUDIO_OUTPUT, ViewAudioOutputClass))
+
+typedef struct _ViewAudioOutput ViewAudioOutput;
+typedef struct _ViewAudioOutputClass ViewAudioOutputClass;
+typedef struct _ViewAudioOutputPrivate ViewAudioOutputPrivate;
+
+#define VIEW_TYPE_OGG_VORBIS_EXPORT (view_ogg_vorbis_export_get_type ())
+#define VIEW_OGG_VORBIS_EXPORT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_OGG_VORBIS_EXPORT, ViewOggVorbisExport))
+#define VIEW_OGG_VORBIS_EXPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_OGG_VORBIS_EXPORT, ViewOggVorbisExportClass))
+#define VIEW_IS_OGG_VORBIS_EXPORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_OGG_VORBIS_EXPORT))
+#define VIEW_IS_OGG_VORBIS_EXPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_OGG_VORBIS_EXPORT))
+#define VIEW_OGG_VORBIS_EXPORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_OGG_VORBIS_EXPORT, ViewOggVorbisExportClass))
+
+typedef struct _ViewOggVorbisExport ViewOggVorbisExport;
+typedef struct _ViewOggVorbisExportClass ViewOggVorbisExportClass;
+typedef struct _ViewOggVorbisExportPrivate ViewOggVorbisExportPrivate;
+#define _g_free0(var) (var = (g_free (var), NULL))
+typedef struct _ModelTrackPrivate ModelTrackPrivate;
+
+typedef enum  {
+       PLAY_STATE_STOPPED,
+       PLAY_STATE_PRE_PLAY,
+       PLAY_STATE_PLAYING,
+       PLAY_STATE_PRE_RECORD_NULL,
+       PLAY_STATE_PRE_RECORD,
+       PLAY_STATE_RECORDING,
+       PLAY_STATE_POST_RECORD,
+       PLAY_STATE_PRE_EXPORT,
+       PLAY_STATE_EXPORTING,
+       PLAY_STATE_CANCEL_EXPORT,
+       PLAY_STATE_LOADING,
+       PLAY_STATE_CLOSING,
+       PLAY_STATE_CLOSED
+} PlayState;
+
+struct _ViewMediaClip {
+       GObject parent_instance;
+       ViewMediaClipPrivate * priv;
+       GstElement* file_source;
+};
+
+struct _ViewMediaClipClass {
+       GObjectClass parent_class;
+};
+
+struct _ViewMediaClipPrivate {
+       ModelClip* clip;
+       GstBin* composition;
+};
+
+typedef enum  {
+       MODEL_MEDIA_TYPE_AUDIO,
+       MODEL_MEDIA_TYPE_VIDEO
+} ModelMediaType;
+
+struct _ModelClip {
+       GObject parent_instance;
+       ModelClipPrivate * priv;
+       ModelClipFile* clipfile;
+       ModelMediaType type;
+       gboolean is_recording;
+       char* name;
+};
+
+struct _ModelClipClass {
+       GObjectClass parent_class;
+};
+
+typedef enum  {
+       LOGGING_FACILITY_SIGNAL_HANDLERS,
+       LOGGING_FACILITY_DEVELOPER_WARNINGS,
+       LOGGING_FACILITY_GRAPH,
+       LOGGING_FACILITY_LOADING,
+       LOGGING_FACILITY_IMPORT,
+       LOGGING_FACILITY_SINGLEDECODEBIN
+} LoggingFacility;
+
+typedef enum  {
+       LOGGING_LEVEL_CRITICAL,
+       LOGGING_LEVEL_HIGH,
+       LOGGING_LEVEL_MEDIUM,
+       LOGGING_LEVEL_LOW,
+       LOGGING_LEVEL_INFO,
+       LOGGING_LEVEL_VERBOSE
+} LoggingLevel;
+
+struct _ViewMediaAudioClip {
+       ViewMediaClip parent_instance;
+       ViewMediaAudioClipPrivate * priv;
+};
+
+struct _ViewMediaAudioClipClass {
+       ViewMediaClipClass parent_class;
+};
+
+struct _ViewMediaVideoClip {
+       ViewMediaClip parent_instance;
+       ViewMediaVideoClipPrivate * priv;
+};
+
+struct _ViewMediaVideoClipClass {
+       ViewMediaClipClass parent_class;
+};
+
+struct _ViewMediaTrack {
+       GObject parent_instance;
+       ViewMediaTrackPrivate * priv;
+       ViewMediaEngine* media_engine;
+       GstBin* composition;
+       GstElement* default_source;
+       GstElement* sink;
+};
+
+struct _ViewMediaTrackClass {
+       GObjectClass parent_class;
+       GstElement* (*empty_element) (ViewMediaTrack* self, GError** error);
+       GstElement* (*get_element) (ViewMediaTrack* self);
+       void (*link_new_pad) (ViewMediaTrack* self, GstPad* pad, GstElement* track_element);
+       void (*unlink_pad) (ViewMediaTrack* self, GstPad* pad, GstElement* track_element);
+};
+
+struct _ViewMediaTrackPrivate {
+       GeeArrayList* clips;
+};
+
+struct _MultiFileProgressInterfaceIface {
+       GTypeInterface parent_iface;
+       void (*cancel) (MultiFileProgressInterface* self);
+       void (*complete) (MultiFileProgressInterface* self);
+};
+
+struct _ViewMediaEngine {
+       GObject parent_instance;
+       ViewMediaEnginePrivate * priv;
+       GstPipeline* pipeline;
+       GstBin* record_bin;
+       GstElement* converter;
+       GstElement* adder;
+       GstState gst_state;
+       PlayState play_state;
+       gint64 position;
+       gboolean playing;
+       ModelAudioTrack* record_track;
+       ModelClip* record_region;
+};
+
+struct _ViewMediaEngineClass {
+       GObjectClass parent_class;
+       void (*do_null_state_export) (ViewMediaEngine* self, gint64 length);
+       void (*pause) (ViewMediaEngine* self);
+};
+
+struct _ModelClipFile {
+       GObject parent_instance;
+       ModelClipFilePrivate * priv;
+       char* filename;
+       GstCaps* video_caps;
+       GstCaps* audio_caps;
+       GdkPixbuf* thumbnail;
+};
+
+struct _ModelClipFileClass {
+       GObjectClass parent_class;
+};
+
+struct _ViewMediaVideoTrack {
+       ViewMediaTrack parent_instance;
+       ViewMediaVideoTrackPrivate * priv;
+};
+
+struct _ViewMediaVideoTrackClass {
+       ViewMediaTrackClass parent_class;
+};
+
+struct _ViewMediaVideoTrackPrivate {
+       GstElement* converter;
+};
+
+struct _ViewClickTrack {
+       GObject parent_instance;
+       ViewClickTrackPrivate * priv;
+};
+
+struct _ViewClickTrackClass {
+       GObjectClass parent_class;
+};
+
+struct _ViewClickTrackPrivate {
+       GstController* click_controller;
+       GstController* volume_controller;
+       GstElement* audio_source;
+       GstElement* audio_convert;
+       GstElement* volume;
+       ModelProject* project;
+};
+
+struct _Fraction {
+       gint numerator;
+       gint denominator;
+};
+
+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);
+};
+
+struct _ViewMediaAudioTrack {
+       ViewMediaTrack parent_instance;
+       ViewMediaAudioTrackPrivate * priv;
+};
+
+struct _ViewMediaAudioTrackClass {
+       ViewMediaTrackClass parent_class;
+};
+
+struct _ViewMediaAudioTrackPrivate {
+       GstElement* audio_convert;
+       GstElement* audio_resample;
+       GstElement* level;
+       GstElement* pan;
+       GstElement* volume;
+       GstPad* adder_pad;
+};
+
+typedef enum  {
+       MODEL_PARAMETER_PAN,
+       MODEL_PARAMETER_VOLUME
+} ModelParameter;
+
+struct _ViewMediaConnector {
+       GObject parent_instance;
+       ViewMediaConnectorPrivate * priv;
+       gint AudioIndex;
+       gint VideoIndex;
+};
+
+struct _ViewMediaConnectorClass {
+       GObjectClass parent_class;
+       void (*connect) (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+       void (*do_disconnect) (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+};
+
+typedef enum  {
+       VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Audio = 1,
+       VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Video = 2
+} ViewMediaConnectorMediaTypes;
+
+struct _ViewMediaConnectorPrivate {
+       ViewMediaConnectorMediaTypes media_types;
+};
+
+struct _ViewVideoOutput {
+       ViewMediaConnector parent_instance;
+       ViewVideoOutputPrivate * priv;
+};
+
+struct _ViewVideoOutputClass {
+       ViewMediaConnectorClass parent_class;
+};
+
+struct _ViewVideoOutputPrivate {
+       GstElement* sink;
+       GtkWidget* output_widget;
+};
+
+struct _ViewAudioOutput {
+       ViewMediaConnector parent_instance;
+       ViewAudioOutputPrivate * priv;
+};
+
+struct _ViewAudioOutputClass {
+       ViewMediaConnectorClass parent_class;
+};
+
+struct _ViewAudioOutputPrivate {
+       GstElement* audio_sink;
+       GstElement* capsfilter;
+};
+
+struct _ViewOggVorbisExport {
+       ViewMediaConnector parent_instance;
+       ViewOggVorbisExportPrivate * priv;
+};
+
+struct _ViewOggVorbisExportClass {
+       ViewMediaConnectorClass parent_class;
+};
+
+struct _ViewOggVorbisExportPrivate {
+       GstElement* capsfilter;
+       GstElement* export_sink;
+       GstElement* mux;
+       GstElement* file_sink;
+       GstElement* video_export_sink;
+};
+
+struct _ViewMediaEnginePrivate {
+       guint callback_id;
+       GstElement* audio_in;
+       GstElement* record_capsfilter;
+       GstElement* wav_encoder;
+       GstElement* record_sink;
+       ModelProject* project;
+       GeeArrayList* tracks;
+};
+
+typedef enum  {
+       MEDIA_ERROR_MISSING_PLUGIN
+} MediaError;
+#define MEDIA_ERROR media_error_quark ()
+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);
+};
+
+
+static gpointer view_media_clip_parent_class = NULL;
+static gpointer view_media_audio_clip_parent_class = NULL;
+static gpointer view_media_video_clip_parent_class = NULL;
+static gpointer view_media_track_parent_class = NULL;
+static gpointer view_media_video_track_parent_class = NULL;
+static gpointer view_click_track_parent_class = NULL;
+static gpointer view_media_audio_track_parent_class = NULL;
+static gpointer view_media_connector_parent_class = NULL;
+static gpointer view_video_output_parent_class = NULL;
+static gpointer view_audio_output_parent_class = NULL;
+static gpointer view_ogg_vorbis_export_parent_class = NULL;
+static gpointer view_media_engine_parent_class = NULL;
+static MultiFileProgressInterfaceIface* view_media_engine_multi_file_progress_interface_parent_iface = NULL;
+
+GType play_state_get_type (void);
+#define CHANNELS_PER_TRACK_PLAYBACK 2
+#define CHANNELS_PER_TRACK_RECORD 1
+GType view_media_clip_get_type (void);
+GType model_clip_get_type (void);
+#define VIEW_MEDIA_CLIP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_MEDIA_CLIP, ViewMediaClipPrivate))
+enum  {
+       VIEW_MEDIA_CLIP_DUMMY_PROPERTY
+};
+GstElement* make_element (const char* name, GError** error);
+GType model_clip_file_get_type (void);
+GType model_media_type_get_type (void);
+static void view_media_clip_on_duration_changed (ViewMediaClip* self, gint64 duration);
+static void _view_media_clip_on_duration_changed_model_clip_duration_changed (ModelClip* _sender, gint64 duration, gpointer self);
+static void view_media_clip_on_media_start_changed (ViewMediaClip* self, gint64 media_start);
+static void _view_media_clip_on_media_start_changed_model_clip_media_start_changed (ModelClip* _sender, gint64 media_start, gpointer self);
+static void view_media_clip_on_start_changed (ViewMediaClip* self, gint64 start);
+static void _view_media_clip_on_start_changed_model_clip_start_changed (ModelClip* _sender, gint64 start, gpointer self);
+gint64 model_clip_get_start (ModelClip* self);
+gint64 model_clip_get_media_start (ModelClip* self);
+gint64 model_clip_get_duration (ModelClip* self);
+void view_media_clip_on_clip_removed (ViewMediaClip* self);
+static void _view_media_clip_on_clip_removed_model_clip_removed (ModelClip* _sender, ModelClip* clip, gpointer self);
+ViewMediaClip* view_media_clip_new (GstBin* composition, ModelClip* clip, GError** error);
+ViewMediaClip* view_media_clip_construct (GType object_type, GstBin* composition, ModelClip* clip, GError** error);
+GType logging_facility_get_type (void);
+GType logging_level_get_type (void);
+void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
+SingleDecodeBin* single_decode_bin_new (GstCaps* caps, const char* name, const char* uri, GError** error);
+SingleDecodeBin* single_decode_bin_construct (GType object_type, GstCaps* caps, const char* name, const char* uri, GError** error);
+GType single_decode_bin_get_type (void);
+void model_clip_file_set_online (ModelClipFile* self, gboolean o);
+void view_media_clip_add_single_decode_bin (ViewMediaClip* self, const char* filename, const char* caps, GError** error);
+gboolean view_media_clip_is_equal (ViewMediaClip* self, ModelClip* clip);
+static void view_media_clip_finalize (GObject* obj);
+GType view_media_audio_clip_get_type (void);
+enum  {
+       VIEW_MEDIA_AUDIO_CLIP_DUMMY_PROPERTY
+};
+ViewMediaAudioClip* view_media_audio_clip_new (GstBin* composition, ModelClip* clip, const char* filename, GError** error);
+ViewMediaAudioClip* view_media_audio_clip_construct (GType object_type, GstBin* composition, ModelClip* clip, const char* filename, GError** error);
+GType view_media_video_clip_get_type (void);
+enum  {
+       VIEW_MEDIA_VIDEO_CLIP_DUMMY_PROPERTY
+};
+ViewMediaVideoClip* view_media_video_clip_new (GstBin* composition, ModelClip* clip, const char* filename, GError** error);
+ViewMediaVideoClip* view_media_video_clip_construct (GType object_type, GstBin* composition, ModelClip* clip, const char* filename, GError** error);
+GType view_media_track_get_type (void);
+GType view_media_engine_get_type (void);
+#define VIEW_MEDIA_TRACK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_MEDIA_TRACK, ViewMediaTrackPrivate))
+enum  {
+       VIEW_MEDIA_TRACK_DUMMY_PROPERTY
+};
+static void view_media_track_on_clip_added (ViewMediaTrack* self, ModelClip* clip);
+GType model_track_get_type (void);
+static void _view_media_track_on_clip_added_model_track_clip_added (ModelTrack* _sender, ModelClip* clip, gboolean select, gpointer self);
+static void view_media_track_on_track_removed (ViewMediaTrack* self, ModelTrack* track);
+static void _view_media_track_on_track_removed_model_track_track_removed (ModelTrack* _sender, ModelTrack* track, gpointer self);
+static void view_media_track_on_pre_export (ViewMediaTrack* self, gint64 length);
+static void _view_media_track_on_pre_export_view_media_engine_pre_export (ViewMediaEngine* _sender, gint64 length, gpointer self);
+static void view_media_track_on_post_export (ViewMediaTrack* self, gboolean deleted);
+static void _view_media_track_on_post_export_view_media_engine_post_export (ViewMediaEngine* _sender, gboolean canceled, gpointer self);
+GstElement* make_element_with_name (const char* element_name, const char* display_name, GError** error);
+GstElement* view_media_track_empty_element (ViewMediaTrack* self, GError** error);
+GType multi_file_progress_interface_get_type (void);
+GType model_audio_track_get_type (void);
+static void view_media_track_on_pad_added (ViewMediaTrack* self, GstPad* pad);
+static void _view_media_track_on_pad_added_gst_element_pad_added (GstElement* _sender, GstPad* pad, gpointer self);
+static void view_media_track_on_pad_removed (ViewMediaTrack* self, GstPad* pad);
+static void _view_media_track_on_pad_removed_gst_element_pad_removed (GstElement* _sender, GstPad* pad, gpointer self);
+ViewMediaTrack* view_media_track_construct (GType object_type, ViewMediaEngine* media_engine, ModelTrack* track, GError** error);
+static GstElement* view_media_track_real_empty_element (ViewMediaTrack* self, GError** error);
+GstElement* view_media_track_get_element (ViewMediaTrack* self);
+static GstElement* view_media_track_real_get_element (ViewMediaTrack* self);
+void view_media_track_link_new_pad (ViewMediaTrack* self, GstPad* pad, GstElement* track_element);
+static void view_media_track_real_link_new_pad (ViewMediaTrack* self, GstPad* pad, GstElement* track_element);
+void view_media_track_unlink_pad (ViewMediaTrack* self, GstPad* pad, GstElement* track_element);
+static void view_media_track_real_unlink_pad (ViewMediaTrack* self, GstPad* pad, GstElement* track_element);
+static void view_media_track_on_clip_updated (ViewMediaTrack* self, ModelClip* clip);
+static void _view_media_track_on_clip_updated_model_clip_updated (ModelClip* _sender, ModelClip* clip, gpointer self);
+gboolean model_clip_file_is_online (ModelClipFile* self);
+static void view_media_track_on_media_clip_removed (ViewMediaTrack* self, ViewMediaClip* clip);
+static void _view_media_track_on_media_clip_removed_view_media_clip_clip_removed (ViewMediaClip* _sender, ViewMediaClip* clip, gpointer self);
+static void view_media_track_finalize (GObject* obj);
+GType view_media_video_track_get_type (void);
+#define VIEW_MEDIA_VIDEO_TRACK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_MEDIA_VIDEO_TRACK, ViewMediaVideoTrackPrivate))
+enum  {
+       VIEW_MEDIA_VIDEO_TRACK_DUMMY_PROPERTY
+};
+ViewMediaVideoTrack* view_media_video_track_new (ViewMediaEngine* media_engine, ModelTrack* track, GstElement* converter, GError** error);
+ViewMediaVideoTrack* view_media_video_track_construct (GType object_type, ViewMediaEngine* media_engine, ModelTrack* track, GstElement* converter, GError** error);
+static GstElement* view_media_video_track_real_get_element (ViewMediaTrack* base);
+static GstElement* view_media_video_track_real_empty_element (ViewMediaTrack* base, GError** error);
+static void view_media_video_track_real_link_new_pad (ViewMediaTrack* base, GstPad* pad, GstElement* track_element);
+static void view_media_video_track_real_unlink_pad (ViewMediaTrack* base, GstPad* pad, GstElement* track_element);
+static void view_media_video_track_finalize (GObject* obj);
+GType view_click_track_get_type (void);
+GType model_project_get_type (void);
+#define VIEW_CLICK_TRACK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_CLICK_TRACK, ViewClickTrackPrivate))
+enum  {
+       VIEW_CLICK_TRACK_DUMMY_PROPERTY
+};
+GType fraction_get_type (void);
+Fraction* fraction_dup (const Fraction* self);
+void fraction_free (Fraction* self);
+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 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);
+static void view_click_track_on_playstate_changed (ViewClickTrack* self);
+static void _view_click_track_on_playstate_changed_view_media_engine_playstate_changed (ViewMediaEngine* _sender, gpointer self);
+static void _g_list_free_g_free (GList* self);
+ViewClickTrack* view_click_track_new (ViewMediaEngine* engine, ModelProject* project, GError** error);
+ViewClickTrack* view_click_track_construct (GType object_type, ViewMediaEngine* engine, ModelProject* project, GError** error);
+static void view_click_track_clear_controllers (ViewClickTrack* self);
+PlayState view_media_engine_get_play_state (ViewMediaEngine* self);
+static void view_click_track_setup_clicks (ViewClickTrack* self, gint bpm, Fraction* time_signature);
+gint model_tempo_information_get_bpm (ModelTempoInformation* self);
+void model_tempo_information_get_time_signature (ModelTempoInformation* self, Fraction* result);
+static void view_click_track_finalize (GObject* obj);
+GType view_media_audio_track_get_type (void);
+#define VIEW_MEDIA_AUDIO_TRACK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_MEDIA_AUDIO_TRACK, ViewMediaAudioTrackPrivate))
+enum  {
+       VIEW_MEDIA_AUDIO_TRACK_DUMMY_PROPERTY
+};
+GType model_parameter_get_type (void);
+static void view_media_audio_track_on_parameter_changed (ViewMediaAudioTrack* self, ModelParameter parameter, double new_value);
+static void _view_media_audio_track_on_parameter_changed_model_audio_track_parameter_changed (ModelAudioTrack* _sender, ModelParameter parameter, double new_value, gpointer self);
+double model_audio_track_get_pan (ModelAudioTrack* self);
+double model_audio_track_get_volume (ModelAudioTrack* self);
+static void view_media_audio_track_on_level_changed (ViewMediaAudioTrack* self, GstObject* source, double level_left, double level_right);
+static void _view_media_audio_track_on_level_changed_view_media_engine_level_changed (ViewMediaEngine* _sender, GstObject* source, double level_left, double level_right, gpointer self);
+void model_audio_track_on_level_changed (ModelAudioTrack* self, double level_left, double level_right);
+static void _model_audio_track_on_level_changed_view_media_audio_track_level_changed (ViewMediaAudioTrack* _sender, double level_left, double level_right, gpointer self);
+ViewMediaAudioTrack* view_media_audio_track_new (ViewMediaEngine* media_engine, ModelAudioTrack* track, GError** error);
+ViewMediaAudioTrack* view_media_audio_track_construct (GType object_type, ViewMediaEngine* media_engine, ModelAudioTrack* track, GError** error);
+GstElement* view_media_engine_get_audio_silence (ViewMediaEngine* self, GError** error);
+static GstElement* view_media_audio_track_real_empty_element (ViewMediaTrack* base, GError** error);
+static void view_media_audio_track_real_link_new_pad (ViewMediaTrack* base, GstPad* pad, GstElement* track_element);
+static void view_media_audio_track_real_unlink_pad (ViewMediaTrack* base, GstPad* pad, GstElement* track_element);
+static GstElement* view_media_audio_track_real_get_element (ViewMediaTrack* base);
+static void view_media_audio_track_finalize (GObject* obj);
+GType view_media_connector_get_type (void);
+GType view_media_connector_media_types_get_type (void);
+#define VIEW_MEDIA_CONNECTOR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_MEDIA_CONNECTOR, ViewMediaConnectorPrivate))
+enum  {
+       VIEW_MEDIA_CONNECTOR_DUMMY_PROPERTY
+};
+ViewMediaConnector* view_media_connector_construct (GType object_type, ViewMediaConnectorMediaTypes media_types);
+gboolean view_media_connector_has_audio (ViewMediaConnector* self);
+gboolean view_media_connector_has_video (ViewMediaConnector* self);
+void view_media_connector_connect (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+static void view_media_connector_real_connect (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+void view_media_connector_do_disconnect (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+static void view_media_connector_real_do_disconnect (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+static void view_media_connector_finalize (GObject* obj);
+GType view_video_output_get_type (void);
+#define VIEW_VIDEO_OUTPUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_VIDEO_OUTPUT, ViewVideoOutputPrivate))
+enum  {
+       VIEW_VIDEO_OUTPUT_DUMMY_PROPERTY
+};
+ViewVideoOutput* view_video_output_new (GtkWidget* output_widget, GError** error);
+ViewVideoOutput* view_video_output_construct (GType object_type, GtkWidget* output_widget, GError** error);
+static void view_video_output_real_connect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+static void view_video_output_real_do_disconnect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+static void view_video_output_finalize (GObject* obj);
+GType view_audio_output_get_type (void);
+#define VIEW_AUDIO_OUTPUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_AUDIO_OUTPUT, ViewAudioOutputPrivate))
+enum  {
+       VIEW_AUDIO_OUTPUT_DUMMY_PROPERTY
+};
+ViewAudioOutput* view_audio_output_new (GstCaps* caps, GError** error);
+ViewAudioOutput* view_audio_output_construct (GType object_type, GstCaps* caps, GError** error);
+static void view_audio_output_real_connect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+static void view_audio_output_real_do_disconnect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+static void view_audio_output_finalize (GObject* obj);
+GType view_ogg_vorbis_export_get_type (void);
+#define VIEW_OGG_VORBIS_EXPORT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_OGG_VORBIS_EXPORT, ViewOggVorbisExportPrivate))
+enum  {
+       VIEW_OGG_VORBIS_EXPORT_DUMMY_PROPERTY
+};
+ViewOggVorbisExport* view_ogg_vorbis_export_new (ViewMediaConnectorMediaTypes media_types, const char* filename, GstCaps* caps, GError** error);
+ViewOggVorbisExport* view_ogg_vorbis_export_construct (GType object_type, ViewMediaConnectorMediaTypes media_types, const char* filename, GstCaps* caps, GError** error);
+char* view_ogg_vorbis_export_get_filename (ViewOggVorbisExport* self);
+static void view_ogg_vorbis_export_real_connect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+static void view_ogg_vorbis_export_real_do_disconnect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1);
+static void view_ogg_vorbis_export_finalize (GObject* obj);
+#define VIEW_MEDIA_ENGINE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_MEDIA_ENGINE, ViewMediaEnginePrivate))
+enum  {
+       VIEW_MEDIA_ENGINE_DUMMY_PROPERTY
+};
+#define VIEW_MEDIA_ENGINE_MIN_GNONLIN "0.10.11"
+#define VIEW_MEDIA_ENGINE_MIN_GST_PLUGINS_GOOD "0.10.15"
+#define VIEW_MEDIA_ENGINE_MIN_GST_PLUGINS_BASE "0.10.15"
+void model_project_on_playstate_changed (ModelProject* self);
+static void _model_project_on_playstate_changed_view_media_engine_playstate_changed (ViewMediaEngine* _sender, gpointer self);
+static void view_media_engine_on_error (ViewMediaEngine* self, GstBus* bus, GstMessage* message);
+static void _view_media_engine_on_error_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+static void view_media_engine_on_warning (ViewMediaEngine* self, GstBus* bus, GstMessage* message);
+static void _view_media_engine_on_warning_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+static void view_media_engine_on_eos (ViewMediaEngine* self, GstBus* bus, GstMessage* message);
+static void _view_media_engine_on_eos_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+static void view_media_engine_on_state_change (ViewMediaEngine* self, GstBus* bus, GstMessage* message);
+static void _view_media_engine_on_state_change_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+static void view_media_engine_on_element (ViewMediaEngine* self, GstBus* bus, GstMessage* message);
+static void _view_media_engine_on_element_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+ViewMediaEngine* view_media_engine_new (ModelProject* project, gboolean include_video, GError** error);
+ViewMediaEngine* view_media_engine_construct (GType object_type, ModelProject* project, gboolean include_video, GError** error);
+static void view_media_engine_check_version (GstRegistry* registry, const char* plugin_name, const char* package_name, const char* min_version, GError** error);
+void view_media_engine_can_run (GError** error);
+GQuark media_error_quark (void);
+gboolean version_at_least (const char* v, const char* w);
+void view_media_engine_connect_output (ViewMediaEngine* self, ViewMediaConnector* connector);
+void view_media_engine_disconnect_output (ViewMediaEngine* self, ViewMediaConnector* connector);
+GstCaps* view_media_engine_get_project_audio_caps (ViewMediaEngine* self);
+gint view_media_engine_get_sample_rate (ViewMediaEngine* self);
+gint view_media_engine_get_sample_width (ViewMediaEngine* self);
+gint view_media_engine_get_sample_depth (ViewMediaEngine* self);
+void view_media_engine_set_play_state (ViewMediaEngine* self, PlayState play_state);
+GstCaps* view_media_engine_build_audio_caps (ViewMediaEngine* self, gint num_channels);
+GstCaps* view_media_engine_get_project_audio_export_caps (ViewMediaEngine* self);
+void model_project_print_graph (ModelProject* self, GstBin* bin, const char* file_name);
+static GValue* _gst_value_dup (GValue* self);
+gboolean view_media_engine_do_state_change (ViewMediaEngine* self);
+void view_media_engine_go (ViewMediaEngine* self, gint64 pos);
+static void view_media_engine_do_paused_state_export (ViewMediaEngine* self);
+static void view_media_engine_end_export (ViewMediaEngine* self, gboolean deleted);
+void view_media_engine_close (ViewMediaEngine* self);
+void view_media_engine_start_record (ViewMediaEngine* self, ModelClip* region, GError** error);
+void view_media_engine_do_play (ViewMediaEngine* self, PlayState new_state);
+void view_media_engine_set_gst_state (ViewMediaEngine* self, GstState state);
+void view_media_engine_post_record (ViewMediaEngine* self);
+void view_media_engine_do_null_state_export (ViewMediaEngine* self, gint64 length);
+static void view_media_engine_real_do_null_state_export (ViewMediaEngine* self, gint64 length);
+static gboolean view_media_engine_on_callback (ViewMediaEngine* self);
+static gboolean _view_media_engine_on_callback_gsource_func (gpointer self);
+gint64 model_project_get_length (ModelProject* self);
+void view_media_engine_pause (ViewMediaEngine* self);
+gboolean model_project_transport_is_recording (ModelProject* self);
+static void view_media_engine_real_pause (ViewMediaEngine* self);
+static void view_media_engine_seek (ViewMediaEngine* self, GstSeekFlags flags, gint64 pos);
+static void view_media_engine_play (ViewMediaEngine* self);
+void view_media_engine_start_export (ViewMediaEngine* self, const char* filename);
+static void view_media_engine_real_cancel (MultiFileProgressInterface* base);
+static void view_media_engine_real_complete (MultiFileProgressInterface* base);
+void view_media_engine_on_load_complete (ViewMediaEngine* self);
+void model_clip_set_duration (ModelClip* self, gint64 value);
+void view_media_engine_on_callback_pulse (ViewMediaEngine* self);
+void _model_track_delete_clip (ModelTrack* self, ModelClip* clip);
+static char* view_media_engine_new_audio_filename (ViewMediaEngine* self, ModelTrack* track);
+ModelClipFile* model_clip_file_new (const char* filename, gint64 length);
+ModelClipFile* model_clip_file_construct (GType object_type, const char* filename, gint64 length);
+ModelClip* model_clip_new (ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording);
+ModelClip* model_clip_construct (GType object_type, ModelClipFile* clipfile, ModelMediaType t, const char* name, gint64 start, gint64 media_start, gint64 duration, gboolean is_recording);
+void view_media_engine_record (ViewMediaEngine* self, ModelAudioTrack* track);
+gboolean model_project_transport_is_playing (ModelProject* self);
+void _model_track_move (ModelTrack* self, ModelClip* c, gint64 pos);
+GstCaps* view_media_engine_get_record_audio_caps (ViewMediaEngine* self);
+char* model_project_get_audio_path (ModelProject* self);
+static char* view_media_engine_generate_base (ViewMediaEngine* self, const char* name);
+ModelMediaType model_track_media_type (ModelTrack* self);
+static ViewMediaTrack* view_media_engine_create_audio_track (ViewMediaEngine* self, ModelTrack* track, GError** error);
+static void view_media_engine_on_track_removed (ViewMediaEngine* self, ViewMediaTrack* track);
+static void _view_media_engine_on_track_removed_view_media_track_track_removed (ViewMediaTrack* _sender, ViewMediaTrack* track, gpointer self);
+static void view_media_engine_on_error_occurred (ViewMediaEngine* self, const char* major_message, const char* minor_message);
+static void _view_media_engine_on_error_occurred_view_media_track_error_occurred (ViewMediaTrack* _sender, const char* major_message, const char* minor_message, gpointer self);
+void view_media_engine_on_track_added (ViewMediaEngine* self, ModelTrack* track);
+static void view_media_engine_finalize (GObject* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+static void g_cclosure_user_marshal_VOID__STRING_STRING (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+static void g_cclosure_user_marshal_VOID__DOUBLE_DOUBLE (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+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);
+static void g_cclosure_user_marshal_VOID__OBJECT_DOUBLE_DOUBLE (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+
+GType play_state_get_type (void) {
+       static volatile gsize play_state_type_id__volatile = 0;
+       if (g_once_init_enter (&play_state_type_id__volatile)) {
+               static const GEnumValue values[] = {{PLAY_STATE_STOPPED, "PLAY_STATE_STOPPED", "stopped"}, {PLAY_STATE_PRE_PLAY, "PLAY_STATE_PRE_PLAY", "pre-play"}, {PLAY_STATE_PLAYING, "PLAY_STATE_PLAYING", "playing"}, {PLAY_STATE_PRE_RECORD_NULL, "PLAY_STATE_PRE_RECORD_NULL", "pre-record-null"}, {PLAY_STATE_PRE_RECORD, "PLAY_STATE_PRE_RECORD", "pre-record"}, {PLAY_STATE_RECORDING, "PLAY_STATE_RECORDING", "recording"}, {PLAY_STATE_POST_RECORD, "PLAY_STATE_POST_RECORD", "post-record"}, {PLAY_STATE_PRE_EXPORT, "PLAY_STATE_PRE_EXPORT", "pre-export"}, {PLAY_STATE_EXPORTING, "PLAY_STATE_EXPORTING", "exporting"}, {PLAY_STATE_CANCEL_EXPORT, "PLAY_STATE_CANCEL_EXPORT", "cancel-export"}, {PLAY_STATE_LOADING, "PLAY_STATE_LOADING", "loading"}, {PLAY_STATE_CLOSING, "PLAY_STATE_CLOSING", "closing"}, {PLAY_STATE_CLOSED, "PLAY_STATE_CLOSED", "closed"}, {0, NULL, NULL}};
+               GType play_state_type_id;
+               play_state_type_id = g_enum_register_static ("PlayState", values);
+               g_once_init_leave (&play_state_type_id__volatile, play_state_type_id);
+       }
+       return play_state_type_id__volatile;
+}
+
+
+static gpointer _gst_object_ref0 (gpointer self) {
+       return self ? gst_object_ref (self) : NULL;
+}
+
+
+#line 69 "MediaEngine.vala"
+static void _view_media_clip_on_duration_changed_model_clip_duration_changed (ModelClip* _sender, gint64 duration, gpointer self) {
+#line 970 "MediaEngine.c"
+       view_media_clip_on_duration_changed (self, duration);
+}
+
+
+#line 64 "MediaEngine.vala"
+static void _view_media_clip_on_media_start_changed_model_clip_media_start_changed (ModelClip* _sender, gint64 media_start, gpointer self) {
+#line 977 "MediaEngine.c"
+       view_media_clip_on_media_start_changed (self, media_start);
+}
+
+
+#line 76 "MediaEngine.vala"
+static void _view_media_clip_on_start_changed_model_clip_start_changed (ModelClip* _sender, gint64 start, gpointer self) {
+#line 984 "MediaEngine.c"
+       view_media_clip_on_start_changed (self, start);
+}
+
+
+#line 58 "MediaEngine.vala"
+static void _view_media_clip_on_clip_removed_model_clip_removed (ModelClip* _sender, ModelClip* clip, gpointer self) {
+#line 991 "MediaEngine.c"
+       view_media_clip_on_clip_removed (self);
+}
+
+
+#line 30 "MediaEngine.vala"
+ViewMediaClip* view_media_clip_construct (GType object_type, GstBin* composition, ModelClip* clip, GError** error) {
+#line 998 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewMediaClip * self;
+       GstBin* _tmp0_;
+       GstElement* _tmp1_;
+       GstElement* _tmp2_;
+#line 30 "MediaEngine.vala"
+       g_return_val_if_fail (GST_IS_BIN (composition), NULL);
+#line 30 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), NULL);
+#line 1008 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 30 "MediaEngine.vala"
+       self = (ViewMediaClip*) g_object_new (object_type, NULL);
+#line 31 "MediaEngine.vala"
+       self->priv->clip = clip;
+#line 32 "MediaEngine.vala"
+       self->priv->composition = (_tmp0_ = _gst_object_ref0 (composition), _gst_object_unref0 (self->priv->composition), _tmp0_);
+#line 33 "MediaEngine.vala"
+       _tmp1_ = make_element ("gnlsource", &_inner_error_);
+#line 1018 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 33 "MediaEngine.vala"
+       self->file_source = (_tmp2_ = _tmp1_, _gst_object_unref0 (self->file_source), _tmp2_);
+#line 34 "MediaEngine.vala"
+       if (!clip->is_recording) {
+#line 35 "MediaEngine.vala"
+               g_signal_connect_object (clip, "duration-changed", (GCallback) _view_media_clip_on_duration_changed_model_clip_duration_changed, self, 0);
+#line 36 "MediaEngine.vala"
+               g_signal_connect_object (clip, "media-start-changed", (GCallback) _view_media_clip_on_media_start_changed_model_clip_media_start_changed, self, 0);
+#line 37 "MediaEngine.vala"
+               g_signal_connect_object (clip, "start-changed", (GCallback) _view_media_clip_on_start_changed_model_clip_start_changed, self, 0);
+#line 39 "MediaEngine.vala"
+               gst_bin_add (composition, _gst_object_ref0 (self->file_source));
+#line 41 "MediaEngine.vala"
+               view_media_clip_on_start_changed (self, model_clip_get_start (clip));
+#line 42 "MediaEngine.vala"
+               view_media_clip_on_media_start_changed (self, model_clip_get_media_start (clip));
+#line 43 "MediaEngine.vala"
+               view_media_clip_on_duration_changed (self, model_clip_get_duration (clip));
+#line 1042 "MediaEngine.c"
+       }
+#line 45 "MediaEngine.vala"
+       g_signal_connect_object (clip, "removed", (GCallback) _view_media_clip_on_clip_removed_model_clip_removed, self, 0);
+#line 1046 "MediaEngine.c"
+       return self;
+}
+
+
+#line 30 "MediaEngine.vala"
+ViewMediaClip* view_media_clip_new (GstBin* composition, ModelClip* clip, GError** error) {
+#line 30 "MediaEngine.vala"
+       return view_media_clip_construct (VIEW_TYPE_MEDIA_CLIP, composition, clip, error);
+#line 1055 "MediaEngine.c"
+}
+
+
+#line 58 "MediaEngine.vala"
+void view_media_clip_on_clip_removed (ViewMediaClip* self) {
+#line 58 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_CLIP (self));
+#line 59 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_removed");
+#line 60 "MediaEngine.vala"
+       gst_bin_remove (self->priv->composition, GST_ELEMENT (GST_BIN (self->file_source)));
+#line 61 "MediaEngine.vala"
+       g_signal_emit_by_name (self, "clip-removed", self);
+#line 1069 "MediaEngine.c"
+}
+
+
+#line 64 "MediaEngine.vala"
+static void view_media_clip_on_media_start_changed (ViewMediaClip* self, gint64 media_start) {
+#line 64 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_CLIP (self));
+#line 65 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_media_start_changed");
+#line 66 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->file_source), "media-start", media_start, NULL);
+#line 1081 "MediaEngine.c"
+}
+
+
+#line 69 "MediaEngine.vala"
+static void view_media_clip_on_duration_changed (ViewMediaClip* self, gint64 duration) {
+#line 69 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_CLIP (self));
+#line 70 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_duration_changed");
+#line 71 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->file_source), "duration", duration, NULL);
+#line 73 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->file_source), "media-duration", duration, NULL);
+#line 1095 "MediaEngine.c"
+}
+
+
+#line 76 "MediaEngine.vala"
+static void view_media_clip_on_start_changed (ViewMediaClip* self, gint64 start) {
+#line 76 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_CLIP (self));
+#line 77 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_start_changed");
+#line 78 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->file_source), "start", start, NULL);
+#line 1107 "MediaEngine.c"
+}
+
+
+#line 81 "MediaEngine.vala"
+void view_media_clip_add_single_decode_bin (ViewMediaClip* self, const char* filename, const char* caps, GError** error) {
+#line 1113 "MediaEngine.c"
+       GError * _inner_error_;
+       GstCaps* _tmp0_;
+       GstElement* _tmp1_;
+       GstElement* sbin;
+#line 81 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_CLIP (self));
+#line 81 "MediaEngine.vala"
+       g_return_if_fail (filename != NULL);
+#line 81 "MediaEngine.vala"
+       g_return_if_fail (caps != NULL);
+#line 1124 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 82 "MediaEngine.vala"
+       sbin = (_tmp1_ = GST_ELEMENT (single_decode_bin_new (_tmp0_ = gst_caps_from_string (caps), "singledecoder", filename, &_inner_error_)), _gst_caps_unref0 (_tmp0_), _tmp1_);
+#line 1128 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return;
+       }
+#line 84 "MediaEngine.vala"
+       if (gst_bin_add (GST_BIN (self->file_source), _gst_object_ref0 (sbin))) {
+#line 85 "MediaEngine.vala"
+               if (!gst_element_sync_state_with_parent (self->file_source)) {
+#line 86 "MediaEngine.vala"
+                       model_clip_file_set_online (self->priv->clip->clipfile, FALSE);
+#line 1139 "MediaEngine.c"
+               }
+       }
+       _gst_object_unref0 (sbin);
+}
+
+
+#line 91 "MediaEngine.vala"
+gboolean view_media_clip_is_equal (ViewMediaClip* self, ModelClip* clip) {
+#line 1148 "MediaEngine.c"
+       gboolean result = FALSE;
+#line 91 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_CLIP (self), FALSE);
+#line 91 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), FALSE);
+#line 1154 "MediaEngine.c"
+       result = clip == self->priv->clip;
+#line 92 "MediaEngine.vala"
+       return result;
+#line 1158 "MediaEngine.c"
+}
+
+
+static void view_media_clip_class_init (ViewMediaClipClass * klass) {
+       view_media_clip_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewMediaClipPrivate));
+       G_OBJECT_CLASS (klass)->finalize = view_media_clip_finalize;
+       g_signal_new ("clip_removed", VIEW_TYPE_MEDIA_CLIP, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, VIEW_TYPE_MEDIA_CLIP);
+}
+
+
+static void view_media_clip_instance_init (ViewMediaClip * self) {
+       self->priv = VIEW_MEDIA_CLIP_GET_PRIVATE (self);
+}
+
+
+static void view_media_clip_finalize (GObject* obj) {
+       ViewMediaClip * self;
+       self = VIEW_MEDIA_CLIP (obj);
+       {
+               guint _tmp0_;
+#line 49 "MediaEngine.vala"
+               g_signal_parse_name ("removed", MODEL_TYPE_CLIP, &_tmp0_, NULL, FALSE);
+#line 49 "MediaEngine.vala"
+               g_signal_handlers_disconnect_matched (self->priv->clip, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp0_, 0, NULL, (GCallback) _view_media_clip_on_clip_removed_model_clip_removed, self);
+#line 50 "MediaEngine.vala"
+               if (!self->priv->clip->is_recording) {
+#line 1186 "MediaEngine.c"
+                       guint _tmp1_;
+                       guint _tmp2_;
+                       guint _tmp3_;
+#line 51 "MediaEngine.vala"
+                       g_signal_parse_name ("duration-changed", MODEL_TYPE_CLIP, &_tmp1_, NULL, FALSE);
+#line 51 "MediaEngine.vala"
+                       g_signal_handlers_disconnect_matched (self->priv->clip, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp1_, 0, NULL, (GCallback) _view_media_clip_on_duration_changed_model_clip_duration_changed, self);
+#line 52 "MediaEngine.vala"
+                       g_signal_parse_name ("media-start-changed", MODEL_TYPE_CLIP, &_tmp2_, NULL, FALSE);
+#line 52 "MediaEngine.vala"
+                       g_signal_handlers_disconnect_matched (self->priv->clip, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp2_, 0, NULL, (GCallback) _view_media_clip_on_media_start_changed_model_clip_media_start_changed, self);
+#line 53 "MediaEngine.vala"
+                       g_signal_parse_name ("start-changed", MODEL_TYPE_CLIP, &_tmp3_, NULL, FALSE);
+#line 53 "MediaEngine.vala"
+                       g_signal_handlers_disconnect_matched (self->priv->clip, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp3_, 0, NULL, (GCallback) _view_media_clip_on_start_changed_model_clip_start_changed, self);
+#line 1202 "MediaEngine.c"
+               }
+#line 55 "MediaEngine.vala"
+               gst_element_set_state (self->file_source, GST_STATE_NULL);
+#line 1206 "MediaEngine.c"
+       }
+       _gst_object_unref0 (self->file_source);
+       _gst_object_unref0 (self->priv->composition);
+       G_OBJECT_CLASS (view_media_clip_parent_class)->finalize (obj);
+}
+
+
+GType view_media_clip_get_type (void) {
+       static volatile gsize view_media_clip_type_id__volatile = 0;
+       if (g_once_init_enter (&view_media_clip_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewMediaClipClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_media_clip_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewMediaClip), 0, (GInstanceInitFunc) view_media_clip_instance_init, NULL };
+               GType view_media_clip_type_id;
+               view_media_clip_type_id = g_type_register_static (G_TYPE_OBJECT, "ViewMediaClip", &g_define_type_info, 0);
+               g_once_init_leave (&view_media_clip_type_id__volatile, view_media_clip_type_id);
+       }
+       return view_media_clip_type_id__volatile;
+}
+
+
+#line 97 "MediaEngine.vala"
+ViewMediaAudioClip* view_media_audio_clip_construct (GType object_type, GstBin* composition, ModelClip* clip, const char* filename, GError** error) {
+#line 1228 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewMediaAudioClip * self;
+#line 97 "MediaEngine.vala"
+       g_return_val_if_fail (GST_IS_BIN (composition), NULL);
+#line 97 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), NULL);
+#line 97 "MediaEngine.vala"
+       g_return_val_if_fail (filename != NULL, NULL);
+#line 1237 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 98 "MediaEngine.vala"
+       self = (ViewMediaAudioClip*) view_media_clip_construct (object_type, composition, clip, error);
+#line 99 "MediaEngine.vala"
+       if (!clip->is_recording) {
+#line 100 "MediaEngine.vala"
+               view_media_clip_add_single_decode_bin (VIEW_MEDIA_CLIP (self), filename, "audio/x-raw-float;audio/x-raw-int", &_inner_error_);
+#line 1245 "MediaEngine.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       g_object_unref (self);
+                       return NULL;
+               }
+       }
+       return self;
+}
+
+
+#line 97 "MediaEngine.vala"
+ViewMediaAudioClip* view_media_audio_clip_new (GstBin* composition, ModelClip* clip, const char* filename, GError** error) {
+#line 97 "MediaEngine.vala"
+       return view_media_audio_clip_construct (VIEW_TYPE_MEDIA_AUDIO_CLIP, composition, clip, filename, error);
+#line 1260 "MediaEngine.c"
+}
+
+
+static void view_media_audio_clip_class_init (ViewMediaAudioClipClass * klass) {
+       view_media_audio_clip_parent_class = g_type_class_peek_parent (klass);
+}
+
+
+static void view_media_audio_clip_instance_init (ViewMediaAudioClip * self) {
+}
+
+
+GType view_media_audio_clip_get_type (void) {
+       static volatile gsize view_media_audio_clip_type_id__volatile = 0;
+       if (g_once_init_enter (&view_media_audio_clip_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewMediaAudioClipClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_media_audio_clip_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewMediaAudioClip), 0, (GInstanceInitFunc) view_media_audio_clip_instance_init, NULL };
+               GType view_media_audio_clip_type_id;
+               view_media_audio_clip_type_id = g_type_register_static (VIEW_TYPE_MEDIA_CLIP, "ViewMediaAudioClip", &g_define_type_info, 0);
+               g_once_init_leave (&view_media_audio_clip_type_id__volatile, view_media_audio_clip_type_id);
+       }
+       return view_media_audio_clip_type_id__volatile;
+}
+
+
+#line 106 "MediaEngine.vala"
+ViewMediaVideoClip* view_media_video_clip_construct (GType object_type, GstBin* composition, ModelClip* clip, const char* filename, GError** error) {
+#line 1287 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewMediaVideoClip * self;
+#line 106 "MediaEngine.vala"
+       g_return_val_if_fail (GST_IS_BIN (composition), NULL);
+#line 106 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_CLIP (clip), NULL);
+#line 106 "MediaEngine.vala"
+       g_return_val_if_fail (filename != NULL, NULL);
+#line 1296 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 107 "MediaEngine.vala"
+       self = (ViewMediaVideoClip*) view_media_clip_construct (object_type, composition, clip, error);
+#line 108 "MediaEngine.vala"
+       view_media_clip_add_single_decode_bin (VIEW_MEDIA_CLIP (self), filename, "video/x-raw-yuv; video/x-raw-rgb", &_inner_error_);
+#line 1302 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+       return self;
+}
+
+
+#line 106 "MediaEngine.vala"
+ViewMediaVideoClip* view_media_video_clip_new (GstBin* composition, ModelClip* clip, const char* filename, GError** error) {
+#line 106 "MediaEngine.vala"
+       return view_media_video_clip_construct (VIEW_TYPE_MEDIA_VIDEO_CLIP, composition, clip, filename, error);
+#line 1316 "MediaEngine.c"
+}
+
+
+static void view_media_video_clip_class_init (ViewMediaVideoClipClass * klass) {
+       view_media_video_clip_parent_class = g_type_class_peek_parent (klass);
+}
+
+
+static void view_media_video_clip_instance_init (ViewMediaVideoClip * self) {
+}
+
+
+GType view_media_video_clip_get_type (void) {
+       static volatile gsize view_media_video_clip_type_id__volatile = 0;
+       if (g_once_init_enter (&view_media_video_clip_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewMediaVideoClipClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_media_video_clip_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewMediaVideoClip), 0, (GInstanceInitFunc) view_media_video_clip_instance_init, NULL };
+               GType view_media_video_clip_type_id;
+               view_media_video_clip_type_id = g_type_register_static (VIEW_TYPE_MEDIA_CLIP, "ViewMediaVideoClip", &g_define_type_info, 0);
+               g_once_init_leave (&view_media_video_clip_type_id__volatile, view_media_video_clip_type_id);
+       }
+       return view_media_video_clip_type_id__volatile;
+}
+
+
+#line 169 "MediaEngine.vala"
+static void _view_media_track_on_clip_added_model_track_clip_added (ModelTrack* _sender, ModelClip* clip, gboolean select, gpointer self) {
+#line 1343 "MediaEngine.c"
+       view_media_track_on_clip_added (self, clip);
+}
+
+
+#line 216 "MediaEngine.vala"
+static void _view_media_track_on_track_removed_model_track_track_removed (ModelTrack* _sender, ModelTrack* track, gpointer self) {
+#line 1350 "MediaEngine.c"
+       view_media_track_on_track_removed (self, track);
+}
+
+
+#line 221 "MediaEngine.vala"
+static void _view_media_track_on_pre_export_view_media_engine_pre_export (ViewMediaEngine* _sender, gint64 length, gpointer self) {
+#line 1357 "MediaEngine.c"
+       view_media_track_on_pre_export (self, length);
+}
+
+
+#line 227 "MediaEngine.vala"
+static void _view_media_track_on_post_export_view_media_engine_post_export (ViewMediaEngine* _sender, gboolean canceled, gpointer self) {
+#line 1364 "MediaEngine.c"
+       view_media_track_on_post_export (self, canceled);
+}
+
+
+#line 206 "MediaEngine.vala"
+static void _view_media_track_on_pad_added_gst_element_pad_added (GstElement* _sender, GstPad* pad, gpointer self) {
+#line 1371 "MediaEngine.c"
+       view_media_track_on_pad_added (self, pad);
+}
+
+
+#line 211 "MediaEngine.vala"
+static void _view_media_track_on_pad_removed_gst_element_pad_removed (GstElement* _sender, GstPad* pad, gpointer self) {
+#line 1378 "MediaEngine.c"
+       view_media_track_on_pad_removed (self, pad);
+}
+
+
+#line 123 "MediaEngine.vala"
+ViewMediaTrack* view_media_track_construct (GType object_type, ViewMediaEngine* media_engine, ModelTrack* track, GError** error) {
+#line 1385 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewMediaTrack * self;
+       GeeArrayList* _tmp0_;
+       GstElement* _tmp1_;
+       GstBin* _tmp2_;
+       GstElement* _tmp3_;
+       GstElement* _tmp4_;
+       GstBin* default_source_bin;
+       GstElement* _tmp5_;
+#line 123 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (media_engine), NULL);
+#line 123 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 1399 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 123 "MediaEngine.vala"
+       self = (ViewMediaTrack*) g_object_new (object_type, NULL);
+#line 124 "MediaEngine.vala"
+       self->priv->clips = (_tmp0_ = gee_array_list_new (VIEW_TYPE_MEDIA_CLIP, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL), _g_object_unref0 (self->priv->clips), _tmp0_);
+#line 125 "MediaEngine.vala"
+       self->media_engine = media_engine;
+#line 126 "MediaEngine.vala"
+       g_signal_connect_object (track, "clip-added", (GCallback) _view_media_track_on_clip_added_model_track_clip_added, self, 0);
+#line 127 "MediaEngine.vala"
+       g_signal_connect_object (track, "track-removed", (GCallback) _view_media_track_on_track_removed_model_track_track_removed, self, 0);
+#line 129 "MediaEngine.vala"
+       g_signal_connect_object (media_engine, "pre-export", (GCallback) _view_media_track_on_pre_export_view_media_engine_pre_export, self, 0);
+#line 130 "MediaEngine.vala"
+       g_signal_connect_object (media_engine, "post-export", (GCallback) _view_media_track_on_post_export_view_media_engine_post_export, self, 0);
+#line 132 "MediaEngine.vala"
+       _tmp1_ = make_element ("gnlcomposition", &_inner_error_);
+#line 1417 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 132 "MediaEngine.vala"
+       self->composition = (_tmp2_ = GST_BIN (_tmp1_), _gst_object_unref0 (self->composition), _tmp2_);
+#line 134 "MediaEngine.vala"
+       _tmp3_ = make_element_with_name ("gnlsource", "track_default_source", &_inner_error_);
+#line 1427 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 134 "MediaEngine.vala"
+       self->default_source = (_tmp4_ = _tmp3_, _gst_object_unref0 (self->default_source), _tmp4_);
+#line 135 "MediaEngine.vala"
+       default_source_bin = _gst_object_ref0 (GST_BIN (self->default_source));
+#line 136 "MediaEngine.vala"
+       _tmp5_ = view_media_track_empty_element (self, &_inner_error_);
+#line 1439 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               _gst_object_unref0 (default_source_bin);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 136 "MediaEngine.vala"
+       if (!gst_bin_add (default_source_bin, _tmp5_)) {
+#line 137 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:137: can't add empty element");
+#line 1450 "MediaEngine.c"
+       }
+#line 142 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->default_source), "priority", 1, NULL);
+#line 143 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->default_source), "start", 0 * GST_SECOND, NULL);
+#line 144 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->default_source), "duration", 1000000 * GST_SECOND, NULL);
+#line 145 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->default_source), "media-start", 0 * GST_SECOND, NULL);
+#line 146 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->default_source), "media-duration", 1000000 * GST_SECOND, NULL);
+#line 148 "MediaEngine.vala"
+       if (!gst_bin_add (self->composition, _gst_object_ref0 (self->default_source))) {
+#line 149 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:149: can't add default source");
+#line 1466 "MediaEngine.c"
+       }
+#line 152 "MediaEngine.vala"
+       gst_bin_add (GST_BIN (media_engine->pipeline), _gst_object_ref0 (GST_ELEMENT (self->composition)));
+#line 153 "MediaEngine.vala"
+       g_signal_connect_object (GST_ELEMENT (self->composition), "pad-added", (GCallback) _view_media_track_on_pad_added_gst_element_pad_added, self, 0);
+#line 154 "MediaEngine.vala"
+       g_signal_connect_object (GST_ELEMENT (self->composition), "pad-removed", (GCallback) _view_media_track_on_pad_removed_gst_element_pad_removed, self, 0);
+#line 1474 "MediaEngine.c"
+       _gst_object_unref0 (default_source_bin);
+       return self;
+}
+
+
+#line 163 "MediaEngine.vala"
+static GstElement* view_media_track_real_empty_element (ViewMediaTrack* self, GError** error) {
+#line 1482 "MediaEngine.c"
+       g_return_val_if_fail (VIEW_IS_MEDIA_TRACK (self), NULL);
+       g_critical ("Type `%s' does not implement abstract method `view_media_track_empty_element'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return NULL;
+}
+
+
+#line 163 "MediaEngine.vala"
+GstElement* view_media_track_empty_element (ViewMediaTrack* self, GError** error) {
+#line 163 "MediaEngine.vala"
+       return VIEW_MEDIA_TRACK_GET_CLASS (self)->empty_element (self, error);
+#line 1493 "MediaEngine.c"
+}
+
+
+#line 164 "MediaEngine.vala"
+static GstElement* view_media_track_real_get_element (ViewMediaTrack* self) {
+#line 1499 "MediaEngine.c"
+       g_return_val_if_fail (VIEW_IS_MEDIA_TRACK (self), NULL);
+       g_critical ("Type `%s' does not implement abstract method `view_media_track_get_element'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return NULL;
+}
+
+
+#line 164 "MediaEngine.vala"
+GstElement* view_media_track_get_element (ViewMediaTrack* self) {
+#line 164 "MediaEngine.vala"
+       return VIEW_MEDIA_TRACK_GET_CLASS (self)->get_element (self);
+#line 1510 "MediaEngine.c"
+}
+
+
+#line 166 "MediaEngine.vala"
+static void view_media_track_real_link_new_pad (ViewMediaTrack* self, GstPad* pad, GstElement* track_element) {
+#line 1516 "MediaEngine.c"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+       g_critical ("Type `%s' does not implement abstract method `view_media_track_link_new_pad'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return;
+}
+
+
+#line 166 "MediaEngine.vala"
+void view_media_track_link_new_pad (ViewMediaTrack* self, GstPad* pad, GstElement* track_element) {
+#line 166 "MediaEngine.vala"
+       VIEW_MEDIA_TRACK_GET_CLASS (self)->link_new_pad (self, pad, track_element);
+#line 1527 "MediaEngine.c"
+}
+
+
+#line 167 "MediaEngine.vala"
+static void view_media_track_real_unlink_pad (ViewMediaTrack* self, GstPad* pad, GstElement* track_element) {
+#line 1533 "MediaEngine.c"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+       g_critical ("Type `%s' does not implement abstract method `view_media_track_unlink_pad'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return;
+}
+
+
+#line 167 "MediaEngine.vala"
+void view_media_track_unlink_pad (ViewMediaTrack* self, GstPad* pad, GstElement* track_element) {
+#line 167 "MediaEngine.vala"
+       VIEW_MEDIA_TRACK_GET_CLASS (self)->unlink_pad (self, pad, track_element);
+#line 1544 "MediaEngine.c"
+}
+
+
+#line 175 "MediaEngine.vala"
+static void _view_media_track_on_clip_updated_model_clip_updated (ModelClip* _sender, ModelClip* clip, gpointer self) {
+#line 1550 "MediaEngine.c"
+       view_media_track_on_clip_updated (self, clip);
+}
+
+
+#line 169 "MediaEngine.vala"
+static void view_media_track_on_clip_added (ViewMediaTrack* self, ModelClip* clip) {
+#line 169 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+#line 169 "MediaEngine.vala"
+       g_return_if_fail (MODEL_IS_CLIP (clip));
+#line 170 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_added");
+#line 171 "MediaEngine.vala"
+       g_signal_connect_object (clip, "updated", (GCallback) _view_media_track_on_clip_updated_model_clip_updated, self, 0);
+#line 172 "MediaEngine.vala"
+       view_media_track_on_clip_updated (self, clip);
+#line 1567 "MediaEngine.c"
+}
+
+
+#line 200 "MediaEngine.vala"
+static void _view_media_track_on_media_clip_removed_view_media_clip_clip_removed (ViewMediaClip* _sender, ViewMediaClip* clip, gpointer self) {
+#line 1573 "MediaEngine.c"
+       view_media_track_on_media_clip_removed (self, clip);
+}
+
+
+#line 175 "MediaEngine.vala"
+static void view_media_track_on_clip_updated (ViewMediaTrack* self, ModelClip* clip) {
+#line 1580 "MediaEngine.c"
+       GError * _inner_error_;
+#line 175 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+#line 175 "MediaEngine.vala"
+       g_return_if_fail (MODEL_IS_CLIP (clip));
+#line 1586 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 176 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_updated");
+#line 177 "MediaEngine.vala"
+       if (model_clip_file_is_online (clip->clipfile)) {
+#line 1592 "MediaEngine.c"
+               {
+                       ViewMediaClip* media_clip;
+                       media_clip = NULL;
+#line 180 "MediaEngine.vala"
+                       if (clip->type == MODEL_MEDIA_TYPE_AUDIO) {
+#line 1598 "MediaEngine.c"
+                               ViewMediaAudioClip* _tmp0_;
+                               ViewMediaClip* _tmp1_;
+#line 181 "MediaEngine.vala"
+                               _tmp0_ = view_media_audio_clip_new (self->composition, clip, clip->clipfile->filename, &_inner_error_);
+#line 1603 "MediaEngine.c"
+                               if (_inner_error_ != NULL) {
+                                       _g_object_unref0 (media_clip);
+                                       goto __catch9_g_error;
+                               }
+#line 181 "MediaEngine.vala"
+                               media_clip = (_tmp1_ = VIEW_MEDIA_CLIP (_tmp0_), _g_object_unref0 (media_clip), _tmp1_);
+#line 1610 "MediaEngine.c"
+                       } else {
+                               ViewMediaVideoClip* _tmp2_;
+                               ViewMediaClip* _tmp3_;
+#line 183 "MediaEngine.vala"
+                               _tmp2_ = view_media_video_clip_new (self->composition, clip, clip->clipfile->filename, &_inner_error_);
+#line 1616 "MediaEngine.c"
+                               if (_inner_error_ != NULL) {
+                                       _g_object_unref0 (media_clip);
+                                       goto __catch9_g_error;
+                               }
+#line 183 "MediaEngine.vala"
+                               media_clip = (_tmp3_ = VIEW_MEDIA_CLIP (_tmp2_), _g_object_unref0 (media_clip), _tmp3_);
+#line 1623 "MediaEngine.c"
+                       }
+#line 185 "MediaEngine.vala"
+                       g_signal_connect_object (media_clip, "clip-removed", (GCallback) _view_media_track_on_media_clip_removed_view_media_clip_clip_removed, self, 0);
+#line 187 "MediaEngine.vala"
+                       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->clips), media_clip);
+#line 1629 "MediaEngine.c"
+                       _g_object_unref0 (media_clip);
+               }
+               goto __finally9;
+               __catch9_g_error:
+               {
+                       GError * e;
+                       e = _inner_error_;
+                       _inner_error_ = NULL;
+                       {
+#line 189 "MediaEngine.vala"
+                               g_signal_emit_by_name (self, "error-occurred", "Could not create clip", e->message);
+#line 1641 "MediaEngine.c"
+                               _g_error_free0 (e);
+                       }
+               }
+               __finally9:
+               if (_inner_error_ != NULL) {
+                       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);
+                       g_clear_error (&_inner_error_);
+                       return;
+               }
+       } else {
+               {
+                       GeeIterator* _media_clip_it;
+                       _media_clip_it = gee_abstract_collection_iterator (GEE_ABSTRACT_COLLECTION (self->priv->clips));
+#line 192 "MediaEngine.vala"
+                       while (TRUE) {
+#line 1657 "MediaEngine.c"
+                               ViewMediaClip* media_clip;
+#line 192 "MediaEngine.vala"
+                               if (!gee_iterator_next (_media_clip_it)) {
+#line 192 "MediaEngine.vala"
+                                       break;
+#line 1663 "MediaEngine.c"
+                               }
+#line 192 "MediaEngine.vala"
+                               media_clip = (ViewMediaClip*) gee_iterator_get (_media_clip_it);
+#line 193 "MediaEngine.vala"
+                               if (view_media_clip_is_equal (media_clip, clip)) {
+#line 194 "MediaEngine.vala"
+                                       view_media_clip_on_clip_removed (media_clip);
+#line 1671 "MediaEngine.c"
+                               }
+                               _g_object_unref0 (media_clip);
+                       }
+                       _g_object_unref0 (_media_clip_it);
+               }
+       }
+}
+
+
+#line 200 "MediaEngine.vala"
+static void view_media_track_on_media_clip_removed (ViewMediaTrack* self, ViewMediaClip* clip) {
+#line 1683 "MediaEngine.c"
+       guint _tmp0_;
+#line 200 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+#line 200 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_CLIP (clip));
+#line 201 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_media_clip_removed");
+#line 202 "MediaEngine.vala"
+       g_signal_parse_name ("clip-removed", VIEW_TYPE_MEDIA_CLIP, &_tmp0_, NULL, FALSE);
+#line 202 "MediaEngine.vala"
+       g_signal_handlers_disconnect_matched (clip, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp0_, 0, NULL, (GCallback) _view_media_track_on_media_clip_removed_view_media_clip_clip_removed, self);
+#line 203 "MediaEngine.vala"
+       gee_abstract_collection_remove (GEE_ABSTRACT_COLLECTION (self->priv->clips), clip);
+#line 1697 "MediaEngine.c"
+}
+
+
+#line 206 "MediaEngine.vala"
+static void view_media_track_on_pad_added (ViewMediaTrack* self, GstPad* pad) {
+#line 1703 "MediaEngine.c"
+       GstElement* _tmp0_;
+#line 206 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+#line 206 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PAD (pad));
+#line 207 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_pad_added");
+#line 208 "MediaEngine.vala"
+       view_media_track_link_new_pad (self, pad, _tmp0_ = view_media_track_get_element (self));
+#line 1713 "MediaEngine.c"
+       _gst_object_unref0 (_tmp0_);
+}
+
+
+#line 211 "MediaEngine.vala"
+static void view_media_track_on_pad_removed (ViewMediaTrack* self, GstPad* pad) {
+#line 1720 "MediaEngine.c"
+       GstElement* _tmp0_;
+#line 211 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+#line 211 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PAD (pad));
+#line 212 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_pad_removed");
+#line 213 "MediaEngine.vala"
+       view_media_track_unlink_pad (self, pad, _tmp0_ = view_media_track_get_element (self));
+#line 1730 "MediaEngine.c"
+       _gst_object_unref0 (_tmp0_);
+}
+
+
+#line 216 "MediaEngine.vala"
+static void view_media_track_on_track_removed (ViewMediaTrack* self, ModelTrack* track) {
+#line 216 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+#line 216 "MediaEngine.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 217 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_track_removed");
+#line 218 "MediaEngine.vala"
+       g_signal_emit_by_name (self, "track-removed", self);
+#line 1745 "MediaEngine.c"
+}
+
+
+#line 221 "MediaEngine.vala"
+static void view_media_track_on_pre_export (ViewMediaTrack* self, gint64 length) {
+#line 221 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+#line 222 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_pre_export");
+#line 223 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->default_source), "duration", length, NULL);
+#line 224 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->default_source), "media-duration", length, NULL);
+#line 1759 "MediaEngine.c"
+}
+
+
+#line 227 "MediaEngine.vala"
+static void view_media_track_on_post_export (ViewMediaTrack* self, gboolean deleted) {
+#line 227 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (self));
+#line 228 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_post_export");
+#line 229 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->default_source), "duration", 1000000 * GST_SECOND, NULL);
+#line 230 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->default_source), "media-duration", 1000000 * GST_SECOND, NULL);
+#line 1773 "MediaEngine.c"
+}
+
+
+static void view_media_track_class_init (ViewMediaTrackClass * klass) {
+       view_media_track_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewMediaTrackPrivate));
+       VIEW_MEDIA_TRACK_CLASS (klass)->empty_element = view_media_track_real_empty_element;
+       VIEW_MEDIA_TRACK_CLASS (klass)->get_element = view_media_track_real_get_element;
+       VIEW_MEDIA_TRACK_CLASS (klass)->link_new_pad = view_media_track_real_link_new_pad;
+       VIEW_MEDIA_TRACK_CLASS (klass)->unlink_pad = view_media_track_real_unlink_pad;
+       G_OBJECT_CLASS (klass)->finalize = view_media_track_finalize;
+       g_signal_new ("track_removed", VIEW_TYPE_MEDIA_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, VIEW_TYPE_MEDIA_TRACK);
+       g_signal_new ("error_occurred", VIEW_TYPE_MEDIA_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__STRING_STRING, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
+}
+
+
+static void view_media_track_instance_init (ViewMediaTrack * self) {
+       self->priv = VIEW_MEDIA_TRACK_GET_PRIVATE (self);
+}
+
+
+static void view_media_track_finalize (GObject* obj) {
+       ViewMediaTrack * self;
+       self = VIEW_MEDIA_TRACK (obj);
+       {
+               gboolean _tmp4_ = FALSE;
+#line 158 "MediaEngine.vala"
+               if (self->composition != NULL) {
+#line 158 "MediaEngine.vala"
+                       _tmp4_ = !gst_bin_remove (GST_BIN (self->media_engine->pipeline), GST_ELEMENT (self->composition));
+#line 1804 "MediaEngine.c"
+               } else {
+#line 158 "MediaEngine.vala"
+                       _tmp4_ = FALSE;
+#line 1808 "MediaEngine.c"
+               }
+#line 158 "MediaEngine.vala"
+               if (_tmp4_) {
+#line 159 "MediaEngine.vala"
+                       g_error ("MediaEngine.vala:159: couldn't remove composition");
+#line 1814 "MediaEngine.c"
+               }
+       }
+       _g_object_unref0 (self->priv->clips);
+       _gst_object_unref0 (self->composition);
+       _gst_object_unref0 (self->default_source);
+       _gst_object_unref0 (self->sink);
+       G_OBJECT_CLASS (view_media_track_parent_class)->finalize (obj);
+}
+
+
+GType view_media_track_get_type (void) {
+       static volatile gsize view_media_track_type_id__volatile = 0;
+       if (g_once_init_enter (&view_media_track_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewMediaTrackClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_media_track_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewMediaTrack), 0, (GInstanceInitFunc) view_media_track_instance_init, NULL };
+               GType view_media_track_type_id;
+               view_media_track_type_id = g_type_register_static (G_TYPE_OBJECT, "ViewMediaTrack", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+               g_once_init_leave (&view_media_track_type_id__volatile, view_media_track_type_id);
+       }
+       return view_media_track_type_id__volatile;
+}
+
+
+#line 237 "MediaEngine.vala"
+ViewMediaVideoTrack* view_media_video_track_construct (GType object_type, ViewMediaEngine* media_engine, ModelTrack* track, GstElement* converter, GError** error) {
+#line 1839 "MediaEngine.c"
+       ViewMediaVideoTrack * self;
+#line 237 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (media_engine), NULL);
+#line 237 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 237 "MediaEngine.vala"
+       g_return_val_if_fail (GST_IS_ELEMENT (converter), NULL);
+#line 239 "MediaEngine.vala"
+       self = (ViewMediaVideoTrack*) view_media_track_construct (object_type, media_engine, track, error);
+#line 240 "MediaEngine.vala"
+       self->priv->converter = converter;
+#line 1851 "MediaEngine.c"
+       return self;
+}
+
+
+#line 237 "MediaEngine.vala"
+ViewMediaVideoTrack* view_media_video_track_new (ViewMediaEngine* media_engine, ModelTrack* track, GstElement* converter, GError** error) {
+#line 237 "MediaEngine.vala"
+       return view_media_video_track_construct (VIEW_TYPE_MEDIA_VIDEO_TRACK, media_engine, track, converter, error);
+#line 1860 "MediaEngine.c"
+}
+
+
+#line 243 "MediaEngine.vala"
+static GstElement* view_media_video_track_real_get_element (ViewMediaTrack* base) {
+#line 1866 "MediaEngine.c"
+       ViewMediaVideoTrack * self;
+       GstElement* result = NULL;
+       self = VIEW_MEDIA_VIDEO_TRACK (base);
+#line 247 "MediaEngine.vala"
+       g_assert (self->priv->converter != NULL);
+#line 248 "MediaEngine.vala"
+       g_assert (gst_element_sync_state_with_parent (self->priv->converter));
+#line 1874 "MediaEngine.c"
+       result = _gst_object_ref0 (self->priv->converter);
+#line 249 "MediaEngine.vala"
+       return result;
+#line 1878 "MediaEngine.c"
+}
+
+
+#line 252 "MediaEngine.vala"
+static GstElement* view_media_video_track_real_empty_element (ViewMediaTrack* base, GError** error) {
+#line 1884 "MediaEngine.c"
+       ViewMediaVideoTrack * self;
+       GstElement* result = NULL;
+       GError * _inner_error_;
+       GstElement* blackness;
+       self = VIEW_MEDIA_VIDEO_TRACK (base);
+       _inner_error_ = NULL;
+#line 253 "MediaEngine.vala"
+       blackness = make_element ("videotestsrc", &_inner_error_);
+#line 1893 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return NULL;
+       }
+#line 254 "MediaEngine.vala"
+       g_object_set (G_OBJECT (blackness), "pattern", 2, NULL);
+#line 1900 "MediaEngine.c"
+       result = blackness;
+#line 255 "MediaEngine.vala"
+       return result;
+#line 1904 "MediaEngine.c"
+}
+
+
+#line 258 "MediaEngine.vala"
+static void view_media_video_track_real_link_new_pad (ViewMediaTrack* base, GstPad* pad, GstElement* track_element) {
+#line 1910 "MediaEngine.c"
+       ViewMediaVideoTrack * self;
+       GstPad* _tmp0_;
+       gboolean _tmp1_;
+       self = VIEW_MEDIA_VIDEO_TRACK (base);
+#line 258 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PAD (pad));
+#line 258 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_ELEMENT (track_element));
+#line 259 "MediaEngine.vala"
+       if ((_tmp1_ = gst_pad_link (pad, _tmp0_ = gst_element_get_static_pad (track_element, "sink")) != GST_PAD_LINK_OK, _gst_object_unref0 (_tmp0_), _tmp1_)) {
+#line 260 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:260: couldn't link pad to converter");
+#line 1923 "MediaEngine.c"
+       }
+}
+
+
+#line 264 "MediaEngine.vala"
+static void view_media_video_track_real_unlink_pad (ViewMediaTrack* base, GstPad* pad, GstElement* track_element) {
+#line 1930 "MediaEngine.c"
+       ViewMediaVideoTrack * self;
+       GstPad* _tmp0_;
+       self = VIEW_MEDIA_VIDEO_TRACK (base);
+#line 264 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PAD (pad));
+#line 264 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_ELEMENT (track_element));
+#line 265 "MediaEngine.vala"
+       gst_pad_unlink (pad, _tmp0_ = gst_element_get_static_pad (track_element, "sink"));
+#line 1940 "MediaEngine.c"
+       _gst_object_unref0 (_tmp0_);
+}
+
+
+static void view_media_video_track_class_init (ViewMediaVideoTrackClass * klass) {
+       view_media_video_track_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewMediaVideoTrackPrivate));
+       VIEW_MEDIA_TRACK_CLASS (klass)->get_element = view_media_video_track_real_get_element;
+       VIEW_MEDIA_TRACK_CLASS (klass)->empty_element = view_media_video_track_real_empty_element;
+       VIEW_MEDIA_TRACK_CLASS (klass)->link_new_pad = view_media_video_track_real_link_new_pad;
+       VIEW_MEDIA_TRACK_CLASS (klass)->unlink_pad = view_media_video_track_real_unlink_pad;
+       G_OBJECT_CLASS (klass)->finalize = view_media_video_track_finalize;
+}
+
+
+static void view_media_video_track_instance_init (ViewMediaVideoTrack * self) {
+       self->priv = VIEW_MEDIA_VIDEO_TRACK_GET_PRIVATE (self);
+}
+
+
+static void view_media_video_track_finalize (GObject* obj) {
+       ViewMediaVideoTrack * self;
+       self = VIEW_MEDIA_VIDEO_TRACK (obj);
+       G_OBJECT_CLASS (view_media_video_track_parent_class)->finalize (obj);
+}
+
+
+GType view_media_video_track_get_type (void) {
+       static volatile gsize view_media_video_track_type_id__volatile = 0;
+       if (g_once_init_enter (&view_media_video_track_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewMediaVideoTrackClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_media_video_track_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewMediaVideoTrack), 0, (GInstanceInitFunc) view_media_video_track_instance_init, NULL };
+               GType view_media_video_track_type_id;
+               view_media_video_track_type_id = g_type_register_static (VIEW_TYPE_MEDIA_TRACK, "ViewMediaVideoTrack", &g_define_type_info, 0);
+               g_once_init_leave (&view_media_video_track_type_id__volatile, view_media_video_track_type_id);
+       }
+       return view_media_video_track_type_id__volatile;
+}
+
+
+#line 302 "MediaEngine.vala"
+static void _view_click_track_on_playstate_changed_view_media_engine_playstate_changed (ViewMediaEngine* _sender, gpointer self) {
+#line 1982 "MediaEngine.c"
+       view_click_track_on_playstate_changed (self);
+}
+
+
+static void _g_list_free_g_free (GList* self) {
+       g_list_foreach (self, (GFunc) g_free, NULL);
+       g_list_free (self);
+}
+
+
+#line 277 "MediaEngine.vala"
+ViewClickTrack* view_click_track_construct (GType object_type, ViewMediaEngine* engine, ModelProject* project, GError** error) {
+#line 1995 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewClickTrack * self;
+       GstElement* _tmp0_;
+       GstElement* _tmp1_;
+       GstElement* _tmp2_;
+       GstElement* _tmp3_;
+       GstElement* _tmp4_;
+       GstElement* _tmp5_;
+       GList* list;
+       GstController* _tmp6_;
+       GstController* _tmp7_;
+#line 277 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (engine), NULL);
+#line 277 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL);
+#line 2011 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 277 "MediaEngine.vala"
+       self = (ViewClickTrack*) g_object_new (object_type, NULL);
+#line 278 "MediaEngine.vala"
+       self->priv->project = project;
+#line 279 "MediaEngine.vala"
+       _tmp0_ = make_element ("audiotestsrc", &_inner_error_);
+#line 2019 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 279 "MediaEngine.vala"
+       self->priv->audio_source = (_tmp1_ = _tmp0_, _gst_object_unref0 (self->priv->audio_source), _tmp1_);
+#line 280 "MediaEngine.vala"
+       _tmp2_ = make_element ("audioconvert", &_inner_error_);
+#line 2029 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 280 "MediaEngine.vala"
+       self->priv->audio_convert = (_tmp3_ = _tmp2_, _gst_object_unref0 (self->priv->audio_convert), _tmp3_);
+#line 281 "MediaEngine.vala"
+       _tmp4_ = make_element ("volume", &_inner_error_);
+#line 2039 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 281 "MediaEngine.vala"
+       self->priv->volume = (_tmp5_ = _tmp4_, _gst_object_unref0 (self->priv->volume), _tmp5_);
+#line 282 "MediaEngine.vala"
+       list = NULL;
+#line 283 "MediaEngine.vala"
+       list = g_list_append (list, g_strdup ("freq"));
+#line 284 "MediaEngine.vala"
+       self->priv->click_controller = (_tmp6_ = gst_controller_new_list (G_OBJECT (self->priv->audio_source), list), _g_object_unref0 (self->priv->click_controller), _tmp6_);
+#line 285 "MediaEngine.vala"
+       list = g_list_remove_all (list, "freq");
+#line 286 "MediaEngine.vala"
+       list = g_list_append (list, g_strdup ("mute"));
+#line 287 "MediaEngine.vala"
+       self->priv->volume_controller = (_tmp7_ = gst_controller_new_list (G_OBJECT (self->priv->volume), list), _g_object_unref0 (self->priv->volume_controller), _tmp7_);
+#line 288 "MediaEngine.vala"
+       gst_bin_add_many (GST_BIN (engine->pipeline), _gst_object_ref0 (self->priv->audio_source), _gst_object_ref0 (self->priv->volume), _gst_object_ref0 (self->priv->audio_convert), NULL);
+#line 289 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->priv->audio_source), "volume", project->click_volume, NULL);
+#line 291 "MediaEngine.vala"
+       gst_element_link_many (self->priv->audio_source, self->priv->audio_convert, self->priv->volume, engine->adder, NULL);
+#line 292 "MediaEngine.vala"
+       g_signal_connect_object (engine, "playstate-changed", (GCallback) _view_click_track_on_playstate_changed_view_media_engine_playstate_changed, self, 0);
+#line 2067 "MediaEngine.c"
+       __g_list_free_g_free0 (list);
+       return self;
+}
+
+
+#line 277 "MediaEngine.vala"
+ViewClickTrack* view_click_track_new (ViewMediaEngine* engine, ModelProject* project, GError** error) {
+#line 277 "MediaEngine.vala"
+       return view_click_track_construct (VIEW_TYPE_CLICK_TRACK, engine, project, error);
+#line 2077 "MediaEngine.c"
+}
+
+
+#line 295 "MediaEngine.vala"
+static void view_click_track_clear_controllers (ViewClickTrack* self) {
+#line 295 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_CLICK_TRACK (self));
+#line 296 "MediaEngine.vala"
+       gst_controller_unset_all (self->priv->volume_controller, "mute");
+#line 297 "MediaEngine.vala"
+       gst_controller_unset_all (self->priv->click_controller, "freq");
+#line 298 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->priv->volume), "mute", TRUE, NULL);
+#line 299 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->priv->volume), "volume", 0.0, NULL);
+#line 2093 "MediaEngine.c"
+}
+
+
+#line 302 "MediaEngine.vala"
+static void view_click_track_on_playstate_changed (ViewClickTrack* self) {
+#line 302 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_CLICK_TRACK (self));
+#line 303 "MediaEngine.vala"
+       switch (view_media_engine_get_play_state (self->priv->project->media_engine)) {
+#line 2103 "MediaEngine.c"
+               case PLAY_STATE_PRE_EXPORT:
+               case PLAY_STATE_STOPPED:
+               {
+#line 306 "MediaEngine.vala"
+                       view_click_track_clear_controllers (self);
+#line 307 "MediaEngine.vala"
+                       break;
+#line 2111 "MediaEngine.c"
+               }
+               case PLAY_STATE_PLAYING:
+               {
+                       {
+#line 309 "MediaEngine.vala"
+                               if (self->priv->project->click_during_play) {
+#line 2118 "MediaEngine.c"
+                                       Fraction _tmp1_;
+                                       Fraction _tmp0_ = {0};
+#line 310 "MediaEngine.vala"
+                                       view_click_track_setup_clicks (self, model_tempo_information_get_bpm (MODEL_TEMPO_INFORMATION (self->priv->project)), (_tmp1_ = (model_tempo_information_get_time_signature (MODEL_TEMPO_INFORMATION (self->priv->project), &_tmp0_), _tmp0_), &_tmp1_));
+#line 2123 "MediaEngine.c"
+                               } else {
+#line 312 "MediaEngine.vala"
+                                       view_click_track_clear_controllers (self);
+#line 2127 "MediaEngine.c"
+                               }
+                       }
+#line 315 "MediaEngine.vala"
+                       break;
+#line 2132 "MediaEngine.c"
+               }
+               case PLAY_STATE_PRE_RECORD:
+               {
+                       {
+#line 317 "MediaEngine.vala"
+                               if (self->priv->project->click_during_record) {
+#line 2139 "MediaEngine.c"
+                                       Fraction _tmp3_;
+                                       Fraction _tmp2_ = {0};
+#line 318 "MediaEngine.vala"
+                                       view_click_track_setup_clicks (self, model_tempo_information_get_bpm (MODEL_TEMPO_INFORMATION (self->priv->project)), (_tmp3_ = (model_tempo_information_get_time_signature (MODEL_TEMPO_INFORMATION (self->priv->project), &_tmp2_), _tmp2_), &_tmp3_));
+#line 2144 "MediaEngine.c"
+                               } else {
+                                       Fraction _tmp5_;
+                                       Fraction _tmp4_ = {0};
+#line 322 "MediaEngine.vala"
+                                       view_click_track_setup_clicks (self, model_tempo_information_get_bpm (MODEL_TEMPO_INFORMATION (self->priv->project)), (_tmp5_ = (model_tempo_information_get_time_signature (MODEL_TEMPO_INFORMATION (self->priv->project), &_tmp4_), _tmp4_), &_tmp5_));
+#line 323 "MediaEngine.vala"
+                                       view_click_track_clear_controllers (self);
+#line 2152 "MediaEngine.c"
+                               }
+                       }
+#line 326 "MediaEngine.vala"
+                       break;
+#line 2157 "MediaEngine.c"
+               }
+       }
+}
+
+
+#line 330 "MediaEngine.vala"
+static void view_click_track_setup_clicks (ViewClickTrack* self, gint bpm, Fraction* time_signature) {
+#line 2165 "MediaEngine.c"
+       GValue double_value = {0};
+       GValue bool_value = {0};
+       GstClockTime time;
+       gint64 conversion;
+       guint64 current_time;
+#line 330 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_CLICK_TRACK (self));
+#line 331 "MediaEngine.vala"
+       view_click_track_clear_controllers (self);
+#line 332 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->priv->volume), "volume", self->priv->project->click_volume / 10, NULL);
+#line 2177 "MediaEngine.c"
+       memset (&double_value, 0, sizeof (GValue));
+#line 335 "MediaEngine.vala"
+       g_value_init (&double_value, g_type_from_name ("gdouble"));
+#line 2181 "MediaEngine.c"
+       memset (&bool_value, 0, sizeof (GValue));
+#line 337 "MediaEngine.vala"
+       g_value_init (&bool_value, g_type_from_name ("gboolean"));
+#line 339 "MediaEngine.vala"
+       time = (GstClockTime) 0;
+#line 340 "MediaEngine.vala"
+       g_value_set_boolean (&bool_value, TRUE);
+#line 341 "MediaEngine.vala"
+       gst_controller_set (self->priv->volume_controller, "volume", time, &bool_value);
+#line 343 "MediaEngine.vala"
+       conversion = (gint64) ((GST_SECOND * 60) / bpm);
+#line 344 "MediaEngine.vala"
+       current_time = (guint64) 0;
+#line 2195 "MediaEngine.c"
+       {
+               gint i;
+#line 346 "MediaEngine.vala"
+               i = 0;
+#line 2200 "MediaEngine.c"
+               {
+                       gboolean _tmp0_;
+#line 346 "MediaEngine.vala"
+                       _tmp0_ = TRUE;
+#line 346 "MediaEngine.vala"
+                       while (TRUE) {
+#line 346 "MediaEngine.vala"
+                               if (!_tmp0_) {
+#line 346 "MediaEngine.vala"
+                                       i = i + 1;
+#line 2211 "MediaEngine.c"
+                               }
+#line 346 "MediaEngine.vala"
+                               _tmp0_ = FALSE;
+#line 346 "MediaEngine.vala"
+                               if (!(current_time < ((GST_SECOND * 60) * 10))) {
+#line 346 "MediaEngine.vala"
+                                       break;
+#line 2219 "MediaEngine.c"
+                               }
+#line 347 "MediaEngine.vala"
+                               current_time = (guint64) (i * conversion);
+#line 348 "MediaEngine.vala"
+                               if (i > 0) {
+#line 349 "MediaEngine.vala"
+                                       time = (GstClockTime) (current_time - (GST_SECOND / 10));
+#line 350 "MediaEngine.vala"
+                                       g_value_set_boolean (&bool_value, TRUE);
+#line 351 "MediaEngine.vala"
+                                       gst_controller_set (self->priv->volume_controller, "mute", time, &bool_value);
+#line 2231 "MediaEngine.c"
+                               }
+#line 353 "MediaEngine.vala"
+                               time = (GstClockTime) current_time;
+#line 354 "MediaEngine.vala"
+                               if ((i % (*time_signature).numerator) == 0) {
+#line 355 "MediaEngine.vala"
+                                       g_value_set_double (&double_value, 880.0);
+#line 2239 "MediaEngine.c"
+                               } else {
+#line 357 "MediaEngine.vala"
+                                       g_value_set_double (&double_value, 440.0);
+#line 2243 "MediaEngine.c"
+                               }
+#line 359 "MediaEngine.vala"
+                               gst_controller_set (self->priv->click_controller, "freq", time, &double_value);
+#line 360 "MediaEngine.vala"
+                               g_value_set_boolean (&bool_value, FALSE);
+#line 361 "MediaEngine.vala"
+                               gst_controller_set (self->priv->volume_controller, "mute", time, &bool_value);
+#line 363 "MediaEngine.vala"
+                               time = (GstClockTime) (current_time + (GST_SECOND / 10));
+#line 364 "MediaEngine.vala"
+                               g_value_set_boolean (&bool_value, TRUE);
+#line 365 "MediaEngine.vala"
+                               gst_controller_set (self->priv->volume_controller, "mute", time, &bool_value);
+#line 2257 "MediaEngine.c"
+                       }
+               }
+       }
+}
+
+
+static void view_click_track_class_init (ViewClickTrackClass * klass) {
+       view_click_track_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewClickTrackPrivate));
+       G_OBJECT_CLASS (klass)->finalize = view_click_track_finalize;
+}
+
+
+static void view_click_track_instance_init (ViewClickTrack * self) {
+       self->priv = VIEW_CLICK_TRACK_GET_PRIVATE (self);
+}
+
+
+static void view_click_track_finalize (GObject* obj) {
+       ViewClickTrack * self;
+       self = VIEW_CLICK_TRACK (obj);
+       _g_object_unref0 (self->priv->click_controller);
+       _g_object_unref0 (self->priv->volume_controller);
+       _gst_object_unref0 (self->priv->audio_source);
+       _gst_object_unref0 (self->priv->audio_convert);
+       _gst_object_unref0 (self->priv->volume);
+       G_OBJECT_CLASS (view_click_track_parent_class)->finalize (obj);
+}
+
+
+GType view_click_track_get_type (void) {
+       static volatile gsize view_click_track_type_id__volatile = 0;
+       if (g_once_init_enter (&view_click_track_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewClickTrackClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_click_track_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewClickTrack), 0, (GInstanceInitFunc) view_click_track_instance_init, NULL };
+               GType view_click_track_type_id;
+               view_click_track_type_id = g_type_register_static (G_TYPE_OBJECT, "ViewClickTrack", &g_define_type_info, 0);
+               g_once_init_leave (&view_click_track_type_id__volatile, view_click_track_type_id);
+       }
+       return view_click_track_type_id__volatile;
+}
+
+
+#line 426 "MediaEngine.vala"
+static void _view_media_audio_track_on_parameter_changed_model_audio_track_parameter_changed (ModelAudioTrack* _sender, ModelParameter parameter, double new_value, gpointer self) {
+#line 2302 "MediaEngine.c"
+       view_media_audio_track_on_parameter_changed (self, parameter, new_value);
+}
+
+
+#line 438 "MediaEngine.vala"
+static void _view_media_audio_track_on_level_changed_view_media_engine_level_changed (ViewMediaEngine* _sender, GstObject* source, double level_left, double level_right, gpointer self) {
+#line 2309 "MediaEngine.c"
+       view_media_audio_track_on_level_changed (self, source, level_left, level_right);
+}
+
+
+#line 610 "track.vala"
+static void _model_audio_track_on_level_changed_view_media_audio_track_level_changed (ViewMediaAudioTrack* _sender, double level_left, double level_right, gpointer self) {
+#line 2316 "MediaEngine.c"
+       model_audio_track_on_level_changed (self, level_left, level_right);
+}
+
+
+#line 378 "MediaEngine.vala"
+ViewMediaAudioTrack* view_media_audio_track_construct (GType object_type, ViewMediaEngine* media_engine, ModelAudioTrack* track, GError** error) {
+#line 2323 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewMediaAudioTrack * self;
+       GstElement* _tmp0_;
+       GstElement* _tmp1_;
+       GstElement* _tmp2_;
+       GstElement* _tmp3_;
+       GstElement* _tmp4_;
+       GstElement* _tmp5_;
+       GstElement* _tmp6_;
+       GstElement* _tmp7_;
+       GstElement* _tmp8_;
+       GstElement* _tmp9_;
+       GValue _tmp10_ = {0};
+       GValue the_level;
+       GValue _tmp11_ = {0};
+       GValue true_value;
+#line 378 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (media_engine), NULL);
+#line 378 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_AUDIO_TRACK (track), NULL);
+#line 2344 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 379 "MediaEngine.vala"
+       self = (ViewMediaAudioTrack*) view_media_track_construct (object_type, media_engine, MODEL_TRACK (track), error);
+#line 380 "MediaEngine.vala"
+       g_signal_connect_object (track, "parameter-changed", (GCallback) _view_media_audio_track_on_parameter_changed_model_audio_track_parameter_changed, self, 0);
+#line 382 "MediaEngine.vala"
+       _tmp0_ = make_element ("audioconvert", &_inner_error_);
+#line 2352 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 382 "MediaEngine.vala"
+       self->priv->audio_convert = (_tmp1_ = _tmp0_, _gst_object_unref0 (self->priv->audio_convert), _tmp1_);
+#line 383 "MediaEngine.vala"
+       _tmp2_ = make_element ("audioresample", &_inner_error_);
+#line 2362 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 383 "MediaEngine.vala"
+       self->priv->audio_resample = (_tmp3_ = _tmp2_, _gst_object_unref0 (self->priv->audio_resample), _tmp3_);
+#line 384 "MediaEngine.vala"
+       _tmp4_ = make_element ("level", &_inner_error_);
+#line 2372 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 384 "MediaEngine.vala"
+       self->priv->level = (_tmp5_ = _tmp4_, _gst_object_unref0 (self->priv->level), _tmp5_);
+#line 386 "MediaEngine.vala"
+       _tmp6_ = make_element ("audiopanorama", &_inner_error_);
+#line 2382 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 386 "MediaEngine.vala"
+       self->priv->pan = (_tmp7_ = _tmp6_, _gst_object_unref0 (self->priv->pan), _tmp7_);
+#line 387 "MediaEngine.vala"
+       view_media_audio_track_on_parameter_changed (self, MODEL_PARAMETER_PAN, model_audio_track_get_pan (track));
+#line 388 "MediaEngine.vala"
+       _tmp8_ = make_element ("volume", &_inner_error_);
+#line 2394 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 388 "MediaEngine.vala"
+       self->priv->volume = (_tmp9_ = _tmp8_, _gst_object_unref0 (self->priv->volume), _tmp9_);
+#line 389 "MediaEngine.vala"
+       view_media_audio_track_on_parameter_changed (self, MODEL_PARAMETER_VOLUME, model_audio_track_get_volume (track));
+#line 391 "MediaEngine.vala"
+       the_level = (g_value_init (&_tmp10_, G_TYPE_UINT64), g_value_set_uint64 (&_tmp10_, (guint64) (GST_SECOND / 30)), _tmp10_);
+#line 392 "MediaEngine.vala"
+       g_object_set_property (G_OBJECT (self->priv->level), "interval", &the_level);
+#line 393 "MediaEngine.vala"
+       true_value = (g_value_init (&_tmp11_, G_TYPE_BOOLEAN), g_value_set_boolean (&_tmp11_, TRUE), _tmp11_);
+#line 394 "MediaEngine.vala"
+       g_object_set_property (G_OBJECT (self->priv->level), "message", &true_value);
+#line 396 "MediaEngine.vala"
+       if (!gst_bin_add (GST_BIN (media_engine->pipeline), _gst_object_ref0 (self->priv->audio_convert))) {
+#line 397 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:397: could not add audio_convert");
+#line 2416 "MediaEngine.c"
+       }
+#line 400 "MediaEngine.vala"
+       if (!gst_bin_add (GST_BIN (media_engine->pipeline), _gst_object_ref0 (self->priv->audio_resample))) {
+#line 401 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:401: could not add audio_resample");
+#line 2422 "MediaEngine.c"
+       }
+#line 404 "MediaEngine.vala"
+       if (!gst_bin_add (GST_BIN (media_engine->pipeline), _gst_object_ref0 (self->priv->level))) {
+#line 405 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:405: could not add level");
+#line 2428 "MediaEngine.c"
+       }
+#line 408 "MediaEngine.vala"
+       if (!gst_bin_add (GST_BIN (media_engine->pipeline), _gst_object_ref0 (self->priv->pan))) {
+#line 409 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:409: could not add pan");
+#line 2434 "MediaEngine.c"
+       }
+#line 412 "MediaEngine.vala"
+       if (!gst_bin_add (GST_BIN (media_engine->pipeline), _gst_object_ref0 (self->priv->volume))) {
+#line 413 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:413: could not add volume");
+#line 2440 "MediaEngine.c"
+       }
+#line 415 "MediaEngine.vala"
+       g_signal_connect_object (media_engine, "level-changed", (GCallback) _view_media_audio_track_on_level_changed_view_media_engine_level_changed, self, 0);
+#line 416 "MediaEngine.vala"
+       g_signal_connect_object (self, "level-changed", (GCallback) _model_audio_track_on_level_changed_view_media_audio_track_level_changed, track, 0);
+#line 2446 "MediaEngine.c"
+       G_IS_VALUE (&the_level) ? (g_value_unset (&the_level), NULL) : NULL;
+       G_IS_VALUE (&true_value) ? (g_value_unset (&true_value), NULL) : NULL;
+       return self;
+}
+
+
+#line 378 "MediaEngine.vala"
+ViewMediaAudioTrack* view_media_audio_track_new (ViewMediaEngine* media_engine, ModelAudioTrack* track, GError** error) {
+#line 378 "MediaEngine.vala"
+       return view_media_audio_track_construct (VIEW_TYPE_MEDIA_AUDIO_TRACK, media_engine, track, error);
+#line 2457 "MediaEngine.c"
+}
+
+
+#line 426 "MediaEngine.vala"
+static void view_media_audio_track_on_parameter_changed (ViewMediaAudioTrack* self, ModelParameter parameter, double new_value) {
+#line 426 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_AUDIO_TRACK (self));
+#line 427 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_parameter_changed");
+#line 428 "MediaEngine.vala"
+       switch (parameter) {
+#line 2469 "MediaEngine.c"
+               case MODEL_PARAMETER_PAN:
+               {
+                       GValue _tmp1_;
+                       GValue _tmp0_ = {0};
+#line 430 "MediaEngine.vala"
+                       g_object_set_property (G_OBJECT (self->priv->pan), "panorama", (_tmp1_ = (g_value_init (&_tmp0_, G_TYPE_DOUBLE), g_value_set_double (&_tmp0_, new_value), _tmp0_), &_tmp1_));
+#line 431 "MediaEngine.vala"
+                       break;
+#line 2478 "MediaEngine.c"
+               }
+               case MODEL_PARAMETER_VOLUME:
+               {
+                       GValue _tmp3_;
+                       GValue _tmp2_ = {0};
+#line 433 "MediaEngine.vala"
+                       g_object_set_property (G_OBJECT (self->priv->volume), "volume", (_tmp3_ = (g_value_init (&_tmp2_, G_TYPE_DOUBLE), g_value_set_double (&_tmp2_, new_value), _tmp2_), &_tmp3_));
+#line 434 "MediaEngine.vala"
+                       break;
+#line 2488 "MediaEngine.c"
+               }
+       }
+}
+
+
+#line 438 "MediaEngine.vala"
+static void view_media_audio_track_on_level_changed (ViewMediaAudioTrack* self, GstObject* source, double level_left, double level_right) {
+#line 438 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_AUDIO_TRACK (self));
+#line 438 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_OBJECT (source));
+#line 439 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_level_changed");
+#line 440 "MediaEngine.vala"
+       if (source == GST_OBJECT (self->priv->level)) {
+#line 441 "MediaEngine.vala"
+               g_signal_emit_by_name (self, "level-changed", level_left, level_right);
+#line 2506 "MediaEngine.c"
+       }
+}
+
+
+#line 445 "MediaEngine.vala"
+static GstElement* view_media_audio_track_real_empty_element (ViewMediaTrack* base, GError** error) {
+#line 2513 "MediaEngine.c"
+       ViewMediaAudioTrack * self;
+       GstElement* result = NULL;
+       GError * _inner_error_;
+       GstElement* _tmp0_;
+       self = VIEW_MEDIA_AUDIO_TRACK (base);
+       _inner_error_ = NULL;
+#line 446 "MediaEngine.vala"
+       _tmp0_ = view_media_engine_get_audio_silence (VIEW_MEDIA_TRACK (self)->media_engine, &_inner_error_);
+#line 2522 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return NULL;
+       }
+       result = _tmp0_;
+#line 446 "MediaEngine.vala"
+       return result;
+#line 2530 "MediaEngine.c"
+}
+
+
+#line 449 "MediaEngine.vala"
+static void view_media_audio_track_real_link_new_pad (ViewMediaTrack* base, GstPad* pad, GstElement* track_element) {
+#line 2536 "MediaEngine.c"
+       ViewMediaAudioTrack * self;
+       GstBin* bin;
+       GstPad* volume_pad;
+       GstPad* _tmp0_;
+       self = VIEW_MEDIA_AUDIO_TRACK (base);
+#line 449 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PAD (pad));
+#line 449 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_ELEMENT (track_element));
+#line 450 "MediaEngine.vala"
+       bin = _gst_object_ref0 (GST_BIN (gst_pad_get_parent_element (pad)));
+#line 451 "MediaEngine.vala"
+       if (!gst_element_link_many (GST_ELEMENT (bin), self->priv->audio_convert, self->priv->audio_resample, self->priv->level, self->priv->pan, self->priv->volume, NULL)) {
+#line 452 "MediaEngine.vala"
+               fprintf (stderr, "could not link_new_pad for audio track");
+#line 2552 "MediaEngine.c"
+       }
+#line 455 "MediaEngine.vala"
+       volume_pad = gst_element_get_pad (self->priv->volume, "src");
+#line 456 "MediaEngine.vala"
+       self->priv->adder_pad = (_tmp0_ = _gst_object_ref0 (GST_ELEMENT_GET_CLASS (track_element)->request_new_pad (track_element, gst_element_get_compatible_pad_template (track_element, gst_pad_get_pad_template (volume_pad)), NULL)), _gst_object_unref0 (self->priv->adder_pad), _tmp0_);
+#line 459 "MediaEngine.vala"
+       if (gst_pad_link (volume_pad, self->priv->adder_pad) != GST_PAD_LINK_OK) {
+#line 460 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:460: could not link to adder %s->%s\n", gst_object_get_name (GST_OBJECT (self->priv->volume)), gst_object_get_name (GST_OBJECT (track_element)));
+#line 2562 "MediaEngine.c"
+       }
+       _gst_object_unref0 (bin);
+       _gst_object_unref0 (volume_pad);
+}
+
+
+#line 464 "MediaEngine.vala"
+static void view_media_audio_track_real_unlink_pad (ViewMediaTrack* base, GstPad* pad, GstElement* track_element) {
+#line 2571 "MediaEngine.c"
+       ViewMediaAudioTrack * self;
+       GstBin* bin;
+       self = VIEW_MEDIA_AUDIO_TRACK (base);
+#line 464 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PAD (pad));
+#line 464 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_ELEMENT (track_element));
+#line 465 "MediaEngine.vala"
+       bin = _gst_object_ref0 (GST_BIN (gst_pad_get_parent_element (pad)));
+#line 466 "MediaEngine.vala"
+       gst_element_unlink_many (GST_ELEMENT (bin), self->priv->audio_convert, self->priv->audio_resample, self->priv->level, self->priv->pan, self->priv->volume, track_element, NULL);
+#line 467 "MediaEngine.vala"
+       gst_element_release_request_pad (track_element, self->priv->adder_pad);
+#line 2585 "MediaEngine.c"
+       _gst_object_unref0 (bin);
+}
+
+
+#line 470 "MediaEngine.vala"
+static GstElement* view_media_audio_track_real_get_element (ViewMediaTrack* base) {
+#line 2592 "MediaEngine.c"
+       ViewMediaAudioTrack * self;
+       GstElement* result = NULL;
+       self = VIEW_MEDIA_AUDIO_TRACK (base);
+       result = _gst_object_ref0 (VIEW_MEDIA_TRACK (self)->media_engine->adder);
+#line 471 "MediaEngine.vala"
+       return result;
+#line 2599 "MediaEngine.c"
+}
+
+
+static void view_media_audio_track_class_init (ViewMediaAudioTrackClass * klass) {
+       view_media_audio_track_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewMediaAudioTrackPrivate));
+       VIEW_MEDIA_TRACK_CLASS (klass)->empty_element = view_media_audio_track_real_empty_element;
+       VIEW_MEDIA_TRACK_CLASS (klass)->link_new_pad = view_media_audio_track_real_link_new_pad;
+       VIEW_MEDIA_TRACK_CLASS (klass)->unlink_pad = view_media_audio_track_real_unlink_pad;
+       VIEW_MEDIA_TRACK_CLASS (klass)->get_element = view_media_audio_track_real_get_element;
+       G_OBJECT_CLASS (klass)->finalize = view_media_audio_track_finalize;
+       g_signal_new ("level_changed", VIEW_TYPE_MEDIA_AUDIO_TRACK, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__DOUBLE_DOUBLE, G_TYPE_NONE, 2, G_TYPE_DOUBLE, G_TYPE_DOUBLE);
+}
+
+
+static void view_media_audio_track_instance_init (ViewMediaAudioTrack * self) {
+       self->priv = VIEW_MEDIA_AUDIO_TRACK_GET_PRIVATE (self);
+}
+
+
+static void view_media_audio_track_finalize (GObject* obj) {
+       ViewMediaAudioTrack * self;
+       self = VIEW_MEDIA_AUDIO_TRACK (obj);
+       {
+               guint _tmp5_;
+#line 420 "MediaEngine.vala"
+               g_signal_parse_name ("level-changed", VIEW_TYPE_MEDIA_ENGINE, &_tmp5_, NULL, FALSE);
+#line 420 "MediaEngine.vala"
+               g_signal_handlers_disconnect_matched (VIEW_MEDIA_TRACK (self)->media_engine, G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, _tmp5_, 0, NULL, (GCallback) _view_media_audio_track_on_level_changed_view_media_engine_level_changed, self);
+#line 421 "MediaEngine.vala"
+               gst_bin_remove_many (GST_BIN (VIEW_MEDIA_TRACK (self)->media_engine->pipeline), self->priv->audio_convert, self->priv->audio_resample, self->priv->pan, self->priv->volume, self->priv->level, NULL);
+#line 2631 "MediaEngine.c"
+       }
+       _gst_object_unref0 (self->priv->audio_convert);
+       _gst_object_unref0 (self->priv->audio_resample);
+       _gst_object_unref0 (self->priv->level);
+       _gst_object_unref0 (self->priv->pan);
+       _gst_object_unref0 (self->priv->volume);
+       _gst_object_unref0 (self->priv->adder_pad);
+       G_OBJECT_CLASS (view_media_audio_track_parent_class)->finalize (obj);
+}
+
+
+GType view_media_audio_track_get_type (void) {
+       static volatile gsize view_media_audio_track_type_id__volatile = 0;
+       if (g_once_init_enter (&view_media_audio_track_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewMediaAudioTrackClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_media_audio_track_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewMediaAudioTrack), 0, (GInstanceInitFunc) view_media_audio_track_instance_init, NULL };
+               GType view_media_audio_track_type_id;
+               view_media_audio_track_type_id = g_type_register_static (VIEW_TYPE_MEDIA_TRACK, "ViewMediaAudioTrack", &g_define_type_info, 0);
+               g_once_init_leave (&view_media_audio_track_type_id__volatile, view_media_audio_track_type_id);
+       }
+       return view_media_audio_track_type_id__volatile;
+}
+
+
+GType view_media_connector_media_types_get_type (void) {
+       static volatile gsize view_media_connector_media_types_type_id__volatile = 0;
+       if (g_once_init_enter (&view_media_connector_media_types_type_id__volatile)) {
+               static const GEnumValue values[] = {{VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Audio, "VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Audio", "audio"}, {VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Video, "VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Video", "video"}, {0, NULL, NULL}};
+               GType view_media_connector_media_types_type_id;
+               view_media_connector_media_types_type_id = g_enum_register_static ("ViewMediaConnectorMediaTypes", values);
+               g_once_init_leave (&view_media_connector_media_types_type_id__volatile, view_media_connector_media_types_type_id);
+       }
+       return view_media_connector_media_types_type_id__volatile;
+}
+
+
+#line 483 "MediaEngine.vala"
+ViewMediaConnector* view_media_connector_construct (GType object_type, ViewMediaConnectorMediaTypes media_types) {
+#line 2669 "MediaEngine.c"
+       ViewMediaConnector * self;
+#line 483 "MediaEngine.vala"
+       self = (ViewMediaConnector*) g_object_new (object_type, NULL);
+#line 484 "MediaEngine.vala"
+       self->priv->media_types = media_types;
+#line 2675 "MediaEngine.c"
+       return self;
+}
+
+
+#line 487 "MediaEngine.vala"
+gboolean view_media_connector_has_audio (ViewMediaConnector* self) {
+#line 2682 "MediaEngine.c"
+       gboolean result = FALSE;
+#line 487 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_CONNECTOR (self), FALSE);
+#line 2686 "MediaEngine.c"
+       result = (self->priv->media_types & VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Audio) == VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Audio;
+#line 488 "MediaEngine.vala"
+       return result;
+#line 2690 "MediaEngine.c"
+}
+
+
+#line 491 "MediaEngine.vala"
+gboolean view_media_connector_has_video (ViewMediaConnector* self) {
+#line 2696 "MediaEngine.c"
+       gboolean result = FALSE;
+#line 491 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_CONNECTOR (self), FALSE);
+#line 2700 "MediaEngine.c"
+       result = (self->priv->media_types & VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Video) == VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Video;
+#line 492 "MediaEngine.vala"
+       return result;
+#line 2704 "MediaEngine.c"
+}
+
+
+#line 495 "MediaEngine.vala"
+static void view_media_connector_real_connect (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 2710 "MediaEngine.c"
+       g_return_if_fail (VIEW_IS_MEDIA_CONNECTOR (self));
+       g_critical ("Type `%s' does not implement abstract method `view_media_connector_connect'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return;
+}
+
+
+#line 495 "MediaEngine.vala"
+void view_media_connector_connect (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 495 "MediaEngine.vala"
+       VIEW_MEDIA_CONNECTOR_GET_CLASS (self)->connect (self, media_engine, pipeline, elements, elements_length1);
+#line 2721 "MediaEngine.c"
+}
+
+
+#line 497 "MediaEngine.vala"
+static void view_media_connector_real_do_disconnect (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 2727 "MediaEngine.c"
+       g_return_if_fail (VIEW_IS_MEDIA_CONNECTOR (self));
+       g_critical ("Type `%s' does not implement abstract method `view_media_connector_do_disconnect'", g_type_name (G_TYPE_FROM_INSTANCE (self)));
+       return;
+}
+
+
+#line 497 "MediaEngine.vala"
+void view_media_connector_do_disconnect (ViewMediaConnector* self, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 497 "MediaEngine.vala"
+       VIEW_MEDIA_CONNECTOR_GET_CLASS (self)->do_disconnect (self, media_engine, pipeline, elements, elements_length1);
+#line 2738 "MediaEngine.c"
+}
+
+
+static void view_media_connector_class_init (ViewMediaConnectorClass * klass) {
+       view_media_connector_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewMediaConnectorPrivate));
+       VIEW_MEDIA_CONNECTOR_CLASS (klass)->connect = view_media_connector_real_connect;
+       VIEW_MEDIA_CONNECTOR_CLASS (klass)->do_disconnect = view_media_connector_real_do_disconnect;
+       G_OBJECT_CLASS (klass)->finalize = view_media_connector_finalize;
+}
+
+
+static void view_media_connector_instance_init (ViewMediaConnector * self) {
+       self->priv = VIEW_MEDIA_CONNECTOR_GET_PRIVATE (self);
+       self->AudioIndex = 0;
+       self->VideoIndex = 1;
+}
+
+
+static void view_media_connector_finalize (GObject* obj) {
+       ViewMediaConnector * self;
+       self = VIEW_MEDIA_CONNECTOR (obj);
+       G_OBJECT_CLASS (view_media_connector_parent_class)->finalize (obj);
+}
+
+
+GType view_media_connector_get_type (void) {
+       static volatile gsize view_media_connector_type_id__volatile = 0;
+       if (g_once_init_enter (&view_media_connector_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewMediaConnectorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_media_connector_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewMediaConnector), 0, (GInstanceInitFunc) view_media_connector_instance_init, NULL };
+               GType view_media_connector_type_id;
+               view_media_connector_type_id = g_type_register_static (G_TYPE_OBJECT, "ViewMediaConnector", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
+               g_once_init_leave (&view_media_connector_type_id__volatile, view_media_connector_type_id);
+       }
+       return view_media_connector_type_id__volatile;
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 505 "MediaEngine.vala"
+ViewVideoOutput* view_video_output_construct (GType object_type, GtkWidget* output_widget, GError** error) {
+#line 2784 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewVideoOutput * self;
+       GstElement* _tmp0_;
+       GstElement* _tmp1_;
+       GtkWidget* _tmp2_;
+#line 505 "MediaEngine.vala"
+       g_return_val_if_fail (GTK_IS_WIDGET (output_widget), NULL);
+#line 2792 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 506 "MediaEngine.vala"
+       self = (ViewVideoOutput*) view_media_connector_construct (object_type, VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Video);
+#line 507 "MediaEngine.vala"
+       _tmp0_ = make_element ("xvimagesink", &_inner_error_);
+#line 2798 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 507 "MediaEngine.vala"
+       self->priv->sink = (_tmp1_ = _tmp0_, _gst_object_unref0 (self->priv->sink), _tmp1_);
+#line 508 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->priv->sink), "force-aspect-ratio", TRUE, NULL);
+#line 509 "MediaEngine.vala"
+       self->priv->output_widget = (_tmp2_ = _g_object_ref0 (output_widget), _g_object_unref0 (self->priv->output_widget), _tmp2_);
+#line 2810 "MediaEngine.c"
+       return self;
+}
+
+
+#line 505 "MediaEngine.vala"
+ViewVideoOutput* view_video_output_new (GtkWidget* output_widget, GError** error) {
+#line 505 "MediaEngine.vala"
+       return view_video_output_construct (VIEW_TYPE_VIDEO_OUTPUT, output_widget, error);
+#line 2819 "MediaEngine.c"
+}
+
+
+#line 512 "MediaEngine.vala"
+static void view_video_output_real_connect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 2825 "MediaEngine.c"
+       ViewVideoOutput * self;
+       XID xid;
+       GstXOverlay* overlay;
+       self = VIEW_VIDEO_OUTPUT (base);
+#line 512 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (media_engine));
+#line 512 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PIPELINE (pipeline));
+#line 514 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_GRAPH, LOGGING_LEVEL_INFO, "connecting");
+#line 516 "MediaEngine.vala"
+       xid = gdk_x11_drawable_get_xid (GDK_DRAWABLE (self->priv->output_widget->window));
+#line 517 "MediaEngine.vala"
+       overlay = _gst_object_ref0 (GST_X_OVERLAY (self->priv->sink));
+#line 518 "MediaEngine.vala"
+       gst_x_overlay_set_xwindow_id (overlay, (gulong) xid);
+#line 522 "MediaEngine.vala"
+       GTK_WIDGET_UNSET_FLAGS (self->priv->output_widget, GTK_DOUBLE_BUFFERED);
+#line 524 "MediaEngine.vala"
+       if (!gst_bin_add (GST_BIN (pipeline), _gst_object_ref0 (self->priv->sink))) {
+#line 525 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:525: could not add sink");
+#line 2848 "MediaEngine.c"
+       }
+#line 527 "MediaEngine.vala"
+       if (!gst_element_link (elements[VIEW_MEDIA_CONNECTOR (self)->VideoIndex], self->priv->sink)) {
+#line 528 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:528: can't link converter with video sink!");
+#line 2854 "MediaEngine.c"
+       }
+       _gst_object_unref0 (overlay);
+}
+
+
+#line 532 "MediaEngine.vala"
+static void view_video_output_real_do_disconnect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 2862 "MediaEngine.c"
+       ViewVideoOutput * self;
+       self = VIEW_VIDEO_OUTPUT (base);
+#line 532 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (media_engine));
+#line 532 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PIPELINE (pipeline));
+#line 534 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_GRAPH, LOGGING_LEVEL_INFO, "disconnecting");
+#line 535 "MediaEngine.vala"
+       gst_element_unlink (elements[VIEW_MEDIA_CONNECTOR (self)->VideoIndex], self->priv->sink);
+#line 536 "MediaEngine.vala"
+       gst_bin_remove (GST_BIN (pipeline), self->priv->sink);
+#line 2875 "MediaEngine.c"
+}
+
+
+static void view_video_output_class_init (ViewVideoOutputClass * klass) {
+       view_video_output_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewVideoOutputPrivate));
+       VIEW_MEDIA_CONNECTOR_CLASS (klass)->connect = view_video_output_real_connect;
+       VIEW_MEDIA_CONNECTOR_CLASS (klass)->do_disconnect = view_video_output_real_do_disconnect;
+       G_OBJECT_CLASS (klass)->finalize = view_video_output_finalize;
+}
+
+
+static void view_video_output_instance_init (ViewVideoOutput * self) {
+       self->priv = VIEW_VIDEO_OUTPUT_GET_PRIVATE (self);
+}
+
+
+static void view_video_output_finalize (GObject* obj) {
+       ViewVideoOutput * self;
+       self = VIEW_VIDEO_OUTPUT (obj);
+       _gst_object_unref0 (self->priv->sink);
+       _g_object_unref0 (self->priv->output_widget);
+       G_OBJECT_CLASS (view_video_output_parent_class)->finalize (obj);
+}
+
+
+GType view_video_output_get_type (void) {
+       static volatile gsize view_video_output_type_id__volatile = 0;
+       if (g_once_init_enter (&view_video_output_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewVideoOutputClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_video_output_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewVideoOutput), 0, (GInstanceInitFunc) view_video_output_instance_init, NULL };
+               GType view_video_output_type_id;
+               view_video_output_type_id = g_type_register_static (VIEW_TYPE_MEDIA_CONNECTOR, "ViewVideoOutput", &g_define_type_info, 0);
+               g_once_init_leave (&view_video_output_type_id__volatile, view_video_output_type_id);
+       }
+       return view_video_output_type_id__volatile;
+}
+
+
+#line 544 "MediaEngine.vala"
+ViewAudioOutput* view_audio_output_construct (GType object_type, GstCaps* caps, GError** error) {
+#line 2916 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewAudioOutput * self;
+       GstElement* _tmp0_;
+       GstElement* _tmp1_;
+       GstElement* _tmp2_;
+       GstElement* _tmp3_;
+#line 544 "MediaEngine.vala"
+       g_return_val_if_fail (GST_IS_CAPS (caps), NULL);
+#line 2925 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 545 "MediaEngine.vala"
+       self = (ViewAudioOutput*) view_media_connector_construct (object_type, VIEW_MEDIA_CONNECTOR_MEDIA_TYPES_Audio);
+#line 546 "MediaEngine.vala"
+       _tmp0_ = make_element ("autoaudiosink", &_inner_error_);
+#line 2931 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 546 "MediaEngine.vala"
+       self->priv->audio_sink = (_tmp1_ = _tmp0_, _gst_object_unref0 (self->priv->audio_sink), _tmp1_);
+#line 547 "MediaEngine.vala"
+       _tmp2_ = make_element ("capsfilter", &_inner_error_);
+#line 2941 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 547 "MediaEngine.vala"
+       self->priv->capsfilter = (_tmp3_ = _tmp2_, _gst_object_unref0 (self->priv->capsfilter), _tmp3_);
+#line 548 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->priv->capsfilter), "caps", caps, NULL);
+#line 2951 "MediaEngine.c"
+       return self;
+}
+
+
+#line 544 "MediaEngine.vala"
+ViewAudioOutput* view_audio_output_new (GstCaps* caps, GError** error) {
+#line 544 "MediaEngine.vala"
+       return view_audio_output_construct (VIEW_TYPE_AUDIO_OUTPUT, caps, error);
+#line 2960 "MediaEngine.c"
+}
+
+
+#line 551 "MediaEngine.vala"
+static void view_audio_output_real_connect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 2966 "MediaEngine.c"
+       ViewAudioOutput * self;
+       self = VIEW_AUDIO_OUTPUT (base);
+#line 551 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (media_engine));
+#line 551 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PIPELINE (pipeline));
+#line 553 "MediaEngine.vala"
+       gst_bin_add_many (GST_BIN (pipeline), _gst_object_ref0 (self->priv->capsfilter), _gst_object_ref0 (self->priv->audio_sink), NULL);
+#line 555 "MediaEngine.vala"
+       if (!gst_element_link_many (elements[VIEW_MEDIA_CONNECTOR (self)->AudioIndex], self->priv->capsfilter, self->priv->audio_sink, NULL)) {
+#line 556 "MediaEngine.vala"
+               g_warning ("MediaEngine.vala:556: could not link audio_sink");
+#line 2979 "MediaEngine.c"
+       }
+}
+
+
+#line 560 "MediaEngine.vala"
+static void view_audio_output_real_do_disconnect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 2986 "MediaEngine.c"
+       ViewAudioOutput * self;
+       self = VIEW_AUDIO_OUTPUT (base);
+#line 560 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (media_engine));
+#line 560 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PIPELINE (pipeline));
+#line 562 "MediaEngine.vala"
+       gst_element_unlink_many (elements[VIEW_MEDIA_CONNECTOR (self)->AudioIndex], self->priv->capsfilter, self->priv->audio_sink, NULL);
+#line 563 "MediaEngine.vala"
+       gst_bin_remove_many (GST_BIN (pipeline), self->priv->capsfilter, self->priv->audio_sink, NULL);
+#line 2997 "MediaEngine.c"
+}
+
+
+static void view_audio_output_class_init (ViewAudioOutputClass * klass) {
+       view_audio_output_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewAudioOutputPrivate));
+       VIEW_MEDIA_CONNECTOR_CLASS (klass)->connect = view_audio_output_real_connect;
+       VIEW_MEDIA_CONNECTOR_CLASS (klass)->do_disconnect = view_audio_output_real_do_disconnect;
+       G_OBJECT_CLASS (klass)->finalize = view_audio_output_finalize;
+}
+
+
+static void view_audio_output_instance_init (ViewAudioOutput * self) {
+       self->priv = VIEW_AUDIO_OUTPUT_GET_PRIVATE (self);
+}
+
+
+static void view_audio_output_finalize (GObject* obj) {
+       ViewAudioOutput * self;
+       self = VIEW_AUDIO_OUTPUT (obj);
+       _gst_object_unref0 (self->priv->audio_sink);
+       _gst_object_unref0 (self->priv->capsfilter);
+       G_OBJECT_CLASS (view_audio_output_parent_class)->finalize (obj);
+}
+
+
+GType view_audio_output_get_type (void) {
+       static volatile gsize view_audio_output_type_id__volatile = 0;
+       if (g_once_init_enter (&view_audio_output_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewAudioOutputClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_audio_output_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewAudioOutput), 0, (GInstanceInitFunc) view_audio_output_instance_init, NULL };
+               GType view_audio_output_type_id;
+               view_audio_output_type_id = g_type_register_static (VIEW_TYPE_MEDIA_CONNECTOR, "ViewAudioOutput", &g_define_type_info, 0);
+               g_once_init_leave (&view_audio_output_type_id__volatile, view_audio_output_type_id);
+       }
+       return view_audio_output_type_id__volatile;
+}
+
+
+#line 574 "MediaEngine.vala"
+ViewOggVorbisExport* view_ogg_vorbis_export_construct (GType object_type, ViewMediaConnectorMediaTypes media_types, const char* filename, GstCaps* caps, GError** error) {
+#line 3038 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewOggVorbisExport * self;
+       GstElement* _tmp0_;
+       GstElement* _tmp1_;
+       GstElement* _tmp2_;
+       GstElement* _tmp3_;
+#line 574 "MediaEngine.vala"
+       g_return_val_if_fail (filename != NULL, NULL);
+#line 574 "MediaEngine.vala"
+       g_return_val_if_fail (GST_IS_CAPS (caps), NULL);
+#line 3049 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 576 "MediaEngine.vala"
+       self = (ViewOggVorbisExport*) view_media_connector_construct (object_type, media_types);
+#line 578 "MediaEngine.vala"
+       _tmp0_ = make_element ("filesink", &_inner_error_);
+#line 3055 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 578 "MediaEngine.vala"
+       self->priv->file_sink = (_tmp1_ = _tmp0_, _gst_object_unref0 (self->priv->file_sink), _tmp1_);
+#line 579 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->priv->file_sink), "location", filename, NULL);
+#line 580 "MediaEngine.vala"
+       _tmp2_ = make_element ("oggmux", &_inner_error_);
+#line 3067 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 580 "MediaEngine.vala"
+       self->priv->mux = (_tmp3_ = _tmp2_, _gst_object_unref0 (self->priv->mux), _tmp3_);
+#line 582 "MediaEngine.vala"
+       if (view_media_connector_has_audio (VIEW_MEDIA_CONNECTOR (self))) {
+#line 3077 "MediaEngine.c"
+               GstElement* _tmp4_;
+               GstElement* _tmp5_;
+               GstElement* _tmp6_;
+               GstElement* _tmp7_;
+#line 583 "MediaEngine.vala"
+               _tmp4_ = make_element ("capsfilter", &_inner_error_);
+#line 3084 "MediaEngine.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       g_object_unref (self);
+                       return NULL;
+               }
+#line 583 "MediaEngine.vala"
+               self->priv->capsfilter = (_tmp5_ = _tmp4_, _gst_object_unref0 (self->priv->capsfilter), _tmp5_);
+#line 584 "MediaEngine.vala"
+               g_object_set (G_OBJECT (self->priv->capsfilter), "caps", caps, NULL);
+#line 585 "MediaEngine.vala"
+               _tmp6_ = make_element ("vorbisenc", &_inner_error_);
+#line 3096 "MediaEngine.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       g_object_unref (self);
+                       return NULL;
+               }
+#line 585 "MediaEngine.vala"
+               self->priv->export_sink = (_tmp7_ = _tmp6_, _gst_object_unref0 (self->priv->export_sink), _tmp7_);
+#line 3104 "MediaEngine.c"
+       }
+#line 588 "MediaEngine.vala"
+       if (view_media_connector_has_video (VIEW_MEDIA_CONNECTOR (self))) {
+#line 3108 "MediaEngine.c"
+               GstElement* _tmp8_;
+               GstElement* _tmp9_;
+#line 589 "MediaEngine.vala"
+               _tmp8_ = make_element ("theoraenc", &_inner_error_);
+#line 3113 "MediaEngine.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       g_object_unref (self);
+                       return NULL;
+               }
+#line 589 "MediaEngine.vala"
+               self->priv->video_export_sink = (_tmp9_ = _tmp8_, _gst_object_unref0 (self->priv->video_export_sink), _tmp9_);
+#line 3121 "MediaEngine.c"
+       }
+       return self;
+}
+
+
+#line 574 "MediaEngine.vala"
+ViewOggVorbisExport* view_ogg_vorbis_export_new (ViewMediaConnectorMediaTypes media_types, const char* filename, GstCaps* caps, GError** error) {
+#line 574 "MediaEngine.vala"
+       return view_ogg_vorbis_export_construct (VIEW_TYPE_OGG_VORBIS_EXPORT, media_types, filename, caps, error);
+#line 3131 "MediaEngine.c"
+}
+
+
+#line 593 "MediaEngine.vala"
+char* view_ogg_vorbis_export_get_filename (ViewOggVorbisExport* self) {
+#line 3137 "MediaEngine.c"
+       char* result = NULL;
+       char* filename;
+#line 593 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_OGG_VORBIS_EXPORT (self), NULL);
+#line 3142 "MediaEngine.c"
+       filename = NULL;
+#line 595 "MediaEngine.vala"
+       g_object_get (G_OBJECT (self->priv->file_sink), "location", &filename, NULL);
+#line 3146 "MediaEngine.c"
+       result = filename;
+#line 596 "MediaEngine.vala"
+       return result;
+#line 3150 "MediaEngine.c"
+}
+
+
+#line 599 "MediaEngine.vala"
+static void view_ogg_vorbis_export_real_connect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 3156 "MediaEngine.c"
+       ViewOggVorbisExport * self;
+       self = VIEW_OGG_VORBIS_EXPORT (base);
+#line 599 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (media_engine));
+#line 599 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PIPELINE (pipeline));
+#line 601 "MediaEngine.vala"
+       gst_bin_add_many (GST_BIN (pipeline), _gst_object_ref0 (self->priv->mux), _gst_object_ref0 (self->priv->file_sink), NULL);
+#line 602 "MediaEngine.vala"
+       gst_element_link (self->priv->mux, self->priv->file_sink);
+#line 604 "MediaEngine.vala"
+       if (view_media_connector_has_audio (VIEW_MEDIA_CONNECTOR (self))) {
+#line 605 "MediaEngine.vala"
+               gst_bin_add_many (GST_BIN (pipeline), _gst_object_ref0 (self->priv->capsfilter), _gst_object_ref0 (self->priv->export_sink), NULL);
+#line 606 "MediaEngine.vala"
+               gst_element_link_many (elements[VIEW_MEDIA_CONNECTOR (self)->AudioIndex], self->priv->capsfilter, self->priv->export_sink, self->priv->mux, NULL);
+#line 3173 "MediaEngine.c"
+       }
+#line 609 "MediaEngine.vala"
+       if (view_media_connector_has_video (VIEW_MEDIA_CONNECTOR (self))) {
+#line 610 "MediaEngine.vala"
+               gst_bin_add (GST_BIN (pipeline), _gst_object_ref0 (self->priv->video_export_sink));
+#line 612 "MediaEngine.vala"
+               if (!gst_element_link (elements[VIEW_MEDIA_CONNECTOR (self)->VideoIndex], self->priv->video_export_sink)) {
+#line 613 "MediaEngine.vala"
+                       g_error ("MediaEngine.vala:613: could not link converter to video_export_sink");
+#line 3183 "MediaEngine.c"
+               }
+#line 616 "MediaEngine.vala"
+               if (!gst_element_link (self->priv->video_export_sink, self->priv->mux)) {
+#line 617 "MediaEngine.vala"
+                       g_error ("MediaEngine.vala:617: could not link video_export with mux");
+#line 3189 "MediaEngine.c"
+               }
+       }
+}
+
+
+#line 622 "MediaEngine.vala"
+static void view_ogg_vorbis_export_real_do_disconnect (ViewMediaConnector* base, ViewMediaEngine* media_engine, GstPipeline* pipeline, GstElement** elements, int elements_length1) {
+#line 3197 "MediaEngine.c"
+       ViewOggVorbisExport * self;
+       self = VIEW_OGG_VORBIS_EXPORT (base);
+#line 622 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (media_engine));
+#line 622 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_PIPELINE (pipeline));
+#line 624 "MediaEngine.vala"
+       if (view_media_connector_has_audio (VIEW_MEDIA_CONNECTOR (self))) {
+#line 625 "MediaEngine.vala"
+               gst_element_unlink_many (elements[VIEW_MEDIA_CONNECTOR (self)->AudioIndex], self->priv->capsfilter, self->priv->export_sink, self->priv->mux, NULL);
+#line 626 "MediaEngine.vala"
+               gst_bin_remove_many (GST_BIN (pipeline), self->priv->capsfilter, self->priv->export_sink, NULL);
+#line 3210 "MediaEngine.c"
+       }
+#line 629 "MediaEngine.vala"
+       if (view_media_connector_has_video (VIEW_MEDIA_CONNECTOR (self))) {
+#line 630 "MediaEngine.vala"
+               gst_element_unlink_many (elements[VIEW_MEDIA_CONNECTOR (self)->VideoIndex], self->priv->video_export_sink, self->priv->mux, NULL);
+#line 631 "MediaEngine.vala"
+               gst_bin_remove (GST_BIN (pipeline), self->priv->video_export_sink);
+#line 3218 "MediaEngine.c"
+       }
+#line 634 "MediaEngine.vala"
+       gst_element_unlink (self->priv->mux, self->priv->file_sink);
+#line 635 "MediaEngine.vala"
+       gst_bin_remove_many (GST_BIN (pipeline), self->priv->mux, self->priv->file_sink, NULL);
+#line 3224 "MediaEngine.c"
+}
+
+
+static void view_ogg_vorbis_export_class_init (ViewOggVorbisExportClass * klass) {
+       view_ogg_vorbis_export_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewOggVorbisExportPrivate));
+       VIEW_MEDIA_CONNECTOR_CLASS (klass)->connect = view_ogg_vorbis_export_real_connect;
+       VIEW_MEDIA_CONNECTOR_CLASS (klass)->do_disconnect = view_ogg_vorbis_export_real_do_disconnect;
+       G_OBJECT_CLASS (klass)->finalize = view_ogg_vorbis_export_finalize;
+}
+
+
+static void view_ogg_vorbis_export_instance_init (ViewOggVorbisExport * self) {
+       self->priv = VIEW_OGG_VORBIS_EXPORT_GET_PRIVATE (self);
+}
+
+
+static void view_ogg_vorbis_export_finalize (GObject* obj) {
+       ViewOggVorbisExport * self;
+       self = VIEW_OGG_VORBIS_EXPORT (obj);
+       _gst_object_unref0 (self->priv->capsfilter);
+       _gst_object_unref0 (self->priv->export_sink);
+       _gst_object_unref0 (self->priv->mux);
+       _gst_object_unref0 (self->priv->file_sink);
+       _gst_object_unref0 (self->priv->video_export_sink);
+       G_OBJECT_CLASS (view_ogg_vorbis_export_parent_class)->finalize (obj);
+}
+
+
+GType view_ogg_vorbis_export_get_type (void) {
+       static volatile gsize view_ogg_vorbis_export_type_id__volatile = 0;
+       if (g_once_init_enter (&view_ogg_vorbis_export_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewOggVorbisExportClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_ogg_vorbis_export_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewOggVorbisExport), 0, (GInstanceInitFunc) view_ogg_vorbis_export_instance_init, NULL };
+               GType view_ogg_vorbis_export_type_id;
+               view_ogg_vorbis_export_type_id = g_type_register_static (VIEW_TYPE_MEDIA_CONNECTOR, "ViewOggVorbisExport", &g_define_type_info, 0);
+               g_once_init_leave (&view_ogg_vorbis_export_type_id__volatile, view_ogg_vorbis_export_type_id);
+       }
+       return view_ogg_vorbis_export_type_id__volatile;
+}
+
+
+#line 397 "project.vala"
+static void _model_project_on_playstate_changed_view_media_engine_playstate_changed (ViewMediaEngine* _sender, gpointer self) {
+#line 3268 "MediaEngine.c"
+       model_project_on_playstate_changed (self);
+}
+
+
+#line 799 "MediaEngine.vala"
+static void _view_media_engine_on_error_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+#line 3275 "MediaEngine.c"
+       view_media_engine_on_error (self, _sender, message);
+}
+
+
+#line 791 "MediaEngine.vala"
+static void _view_media_engine_on_warning_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+#line 3282 "MediaEngine.c"
+       view_media_engine_on_warning (self, _sender, message);
+}
+
+
+#line 808 "MediaEngine.vala"
+static void _view_media_engine_on_eos_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+#line 3289 "MediaEngine.c"
+       view_media_engine_on_eos (self, _sender, message);
+}
+
+
+#line 833 "MediaEngine.vala"
+static void _view_media_engine_on_state_change_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+#line 3296 "MediaEngine.c"
+       view_media_engine_on_state_change (self, _sender, message);
+}
+
+
+#line 814 "MediaEngine.vala"
+static void _view_media_engine_on_element_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+#line 3303 "MediaEngine.c"
+       view_media_engine_on_element (self, _sender, message);
+}
+
+
+#line 680 "MediaEngine.vala"
+ViewMediaEngine* view_media_engine_construct (GType object_type, ModelProject* project, gboolean include_video, GError** error) {
+#line 3310 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewMediaEngine * self;
+       GeeArrayList* _tmp0_;
+       GstPipeline* _tmp1_;
+       GstElement* silence;
+       GstElement* _tmp4_;
+       GstElement* _tmp5_;
+       GstElement* audio_convert;
+       GstBus* bus;
+#line 680 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_PROJECT (project), NULL);
+#line 3322 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 680 "MediaEngine.vala"
+       self = (ViewMediaEngine*) g_object_new (object_type, NULL);
+#line 681 "MediaEngine.vala"
+       self->priv->tracks = (_tmp0_ = gee_array_list_new (VIEW_TYPE_MEDIA_TRACK, (GBoxedCopyFunc) g_object_ref, g_object_unref, NULL), _g_object_unref0 (self->priv->tracks), _tmp0_);
+#line 682 "MediaEngine.vala"
+       self->priv->project = project;
+#line 683 "MediaEngine.vala"
+       g_signal_connect_object (self, "playstate-changed", (GCallback) _model_project_on_playstate_changed_view_media_engine_playstate_changed, project, 0);
+#line 684 "MediaEngine.vala"
+       self->pipeline = (_tmp1_ = (GstPipeline*) gst_pipeline_new ("pipeline"), _gst_object_unref0 (self->pipeline), _tmp1_);
+#line 685 "MediaEngine.vala"
+       gst_pipeline_set_auto_flush_bus (self->pipeline, FALSE);
+#line 687 "MediaEngine.vala"
+       if (include_video) {
+#line 3338 "MediaEngine.c"
+               GstElement* _tmp2_;
+               GstElement* _tmp3_;
+#line 688 "MediaEngine.vala"
+               _tmp2_ = make_element ("ffmpegcolorspace", &_inner_error_);
+#line 3343 "MediaEngine.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       g_object_unref (self);
+                       return NULL;
+               }
+#line 688 "MediaEngine.vala"
+               self->converter = (_tmp3_ = _tmp2_, _gst_object_unref0 (self->converter), _tmp3_);
+#line 689 "MediaEngine.vala"
+               gst_bin_add (GST_BIN (self->pipeline), _gst_object_ref0 (self->converter));
+#line 3353 "MediaEngine.c"
+       }
+#line 692 "MediaEngine.vala"
+       silence = view_media_engine_get_audio_silence (self, &_inner_error_);
+#line 3357 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 694 "MediaEngine.vala"
+       _tmp4_ = make_element ("adder", &_inner_error_);
+#line 3365 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               _gst_object_unref0 (silence);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 694 "MediaEngine.vala"
+       self->adder = (_tmp5_ = _tmp4_, _gst_object_unref0 (self->adder), _tmp5_);
+#line 696 "MediaEngine.vala"
+       audio_convert = make_element_with_name ("audioconvert", "projectconvert", &_inner_error_);
+#line 3376 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               _gst_object_unref0 (silence);
+               g_object_unref (self);
+               return NULL;
+       }
+#line 697 "MediaEngine.vala"
+       gst_bin_add_many (GST_BIN (self->pipeline), _gst_object_ref0 (silence), _gst_object_ref0 (audio_convert), _gst_object_ref0 (self->adder), NULL);
+#line 699 "MediaEngine.vala"
+       if (!gst_element_link_many (silence, audio_convert, self->adder, NULL)) {
+#line 700 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:700: silence: couldn't link");
+#line 3389 "MediaEngine.c"
+       }
+#line 703 "MediaEngine.vala"
+       bus = gst_pipeline_get_bus (self->pipeline);
+#line 705 "MediaEngine.vala"
+       gst_bus_add_signal_watch (bus);
+#line 706 "MediaEngine.vala"
+       g_signal_connect_object (bus, "message::error", (GCallback) _view_media_engine_on_error_gst_bus_message, self, 0);
+#line 707 "MediaEngine.vala"
+       g_signal_connect_object (bus, "message::warning", (GCallback) _view_media_engine_on_warning_gst_bus_message, self, 0);
+#line 708 "MediaEngine.vala"
+       g_signal_connect_object (bus, "message::eos", (GCallback) _view_media_engine_on_eos_gst_bus_message, self, 0);
+#line 709 "MediaEngine.vala"
+       g_signal_connect_object (bus, "message::state-changed", (GCallback) _view_media_engine_on_state_change_gst_bus_message, self, 0);
+#line 710 "MediaEngine.vala"
+       g_signal_connect_object (bus, "message::element", (GCallback) _view_media_engine_on_element_gst_bus_message, self, 0);
+#line 3405 "MediaEngine.c"
+       _gst_object_unref0 (silence);
+       _gst_object_unref0 (audio_convert);
+       _gst_object_unref0 (bus);
+       return self;
+}
+
+
+#line 680 "MediaEngine.vala"
+ViewMediaEngine* view_media_engine_new (ModelProject* project, gboolean include_video, GError** error) {
+#line 680 "MediaEngine.vala"
+       return view_media_engine_construct (VIEW_TYPE_MEDIA_ENGINE, project, include_video, error);
+#line 3417 "MediaEngine.c"
+}
+
+
+#line 713 "MediaEngine.vala"
+void view_media_engine_can_run (GError** error) {
+#line 3423 "MediaEngine.c"
+       GError * _inner_error_;
+       GstRegistry* registry;
+       _inner_error_ = NULL;
+#line 714 "MediaEngine.vala"
+       registry = _gst_object_ref0 (gst_registry_get_default ());
+#line 715 "MediaEngine.vala"
+       view_media_engine_check_version (registry, "adder", "gst-plugins-base", VIEW_MEDIA_ENGINE_MIN_GST_PLUGINS_BASE, &_inner_error_);
+#line 3431 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               _gst_object_unref0 (registry);
+               return;
+       }
+#line 716 "MediaEngine.vala"
+       view_media_engine_check_version (registry, "level", "gst-plugins-good", VIEW_MEDIA_ENGINE_MIN_GST_PLUGINS_GOOD, &_inner_error_);
+#line 3439 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               _gst_object_unref0 (registry);
+               return;
+       }
+#line 717 "MediaEngine.vala"
+       view_media_engine_check_version (registry, "gnonlin", "gnonlin", VIEW_MEDIA_ENGINE_MIN_GNONLIN, &_inner_error_);
+#line 3447 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               _gst_object_unref0 (registry);
+               return;
+       }
+       _gst_object_unref0 (registry);
+}
+
+
+#line 720 "MediaEngine.vala"
+static void view_media_engine_check_version (GstRegistry* registry, const char* plugin_name, const char* package_name, const char* min_version, GError** error) {
+#line 3459 "MediaEngine.c"
+       GError * _inner_error_;
+       GstPlugin* plugin;
+       char* version;
+#line 720 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_REGISTRY (registry));
+#line 720 "MediaEngine.vala"
+       g_return_if_fail (plugin_name != NULL);
+#line 720 "MediaEngine.vala"
+       g_return_if_fail (package_name != NULL);
+#line 720 "MediaEngine.vala"
+       g_return_if_fail (min_version != NULL);
+#line 3471 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 722 "MediaEngine.vala"
+       plugin = gst_registry_find_plugin (registry, plugin_name);
+#line 723 "MediaEngine.vala"
+       if (plugin == NULL) {
+#line 3477 "MediaEngine.c"
+               char* _tmp0_;
+               GError* _tmp1_;
+               _inner_error_ = (_tmp1_ = g_error_new_literal (MEDIA_ERROR, MEDIA_ERROR_MISSING_PLUGIN, _tmp0_ = g_strdup_printf ("You must install %s to use this program", package_name)), _g_free0 (_tmp0_), _tmp1_);
+               {
+                       g_propagate_error (error, _inner_error_);
+                       _gst_object_unref0 (plugin);
+                       return;
+               }
+       }
+#line 728 "MediaEngine.vala"
+       version = g_strdup (gst_plugin_get_version (plugin));
+#line 729 "MediaEngine.vala"
+       if (!version_at_least (version, min_version)) {
+#line 3491 "MediaEngine.c"
+               char* _tmp2_;
+               GError* _tmp3_;
+               _inner_error_ = (_tmp3_ = g_error_new_literal (MEDIA_ERROR, MEDIA_ERROR_MISSING_PLUGIN, _tmp2_ = g_strdup_printf ("You have %s version %s, but this program requires at least version %s", package_name, version, min_version)), _g_free0 (_tmp2_), _tmp3_);
+               {
+                       g_propagate_error (error, _inner_error_);
+                       _gst_object_unref0 (plugin);
+                       _g_free0 (version);
+                       return;
+               }
+       }
+       _gst_object_unref0 (plugin);
+       _g_free0 (version);
+}
+
+
+#line 736 "MediaEngine.vala"
+void view_media_engine_connect_output (ViewMediaEngine* self, ViewMediaConnector* connector) {
+#line 3509 "MediaEngine.c"
+       gint _tmp1__length1;
+       GstElement** _tmp1_;
+       GstElement** _tmp0_ = NULL;
+#line 736 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 736 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_CONNECTOR (connector));
+#line 737 "MediaEngine.vala"
+       view_media_connector_connect (connector, self, self->pipeline, (_tmp1_ = (_tmp0_ = g_new0 (GstElement*, 2 + 1), _tmp0_[0] = _gst_object_ref0 (self->adder), _tmp0_[1] = _gst_object_ref0 (self->converter), _tmp0_), _tmp1__length1 = 2, _tmp1_), 2);
+#line 3519 "MediaEngine.c"
+       _tmp1_ = (_vala_array_free (_tmp1_, _tmp1__length1, (GDestroyNotify) gst_object_unref), NULL);
+}
+
+
+#line 740 "MediaEngine.vala"
+void view_media_engine_disconnect_output (ViewMediaEngine* self, ViewMediaConnector* connector) {
+#line 3526 "MediaEngine.c"
+       gint _tmp1__length1;
+       GstElement** _tmp1_;
+       GstElement** _tmp0_ = NULL;
+#line 740 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 740 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_CONNECTOR (connector));
+#line 741 "MediaEngine.vala"
+       gst_element_seek_simple (GST_ELEMENT (self->pipeline), GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, (gint64) 0);
+#line 742 "MediaEngine.vala"
+       gst_element_set_state (GST_ELEMENT (self->pipeline), GST_STATE_NULL);
+#line 743 "MediaEngine.vala"
+       view_media_connector_do_disconnect (connector, self, self->pipeline, (_tmp1_ = (_tmp0_ = g_new0 (GstElement*, 2 + 1), _tmp0_[0] = _gst_object_ref0 (self->adder), _tmp0_[1] = _gst_object_ref0 (self->converter), _tmp0_), _tmp1__length1 = 2, _tmp1_), 2);
+#line 3540 "MediaEngine.c"
+       _tmp1_ = (_vala_array_free (_tmp1_, _tmp1__length1, (GDestroyNotify) gst_object_unref), NULL);
+}
+
+
+#line 746 "MediaEngine.vala"
+GstElement* view_media_engine_get_audio_silence (ViewMediaEngine* self, GError** error) {
+#line 3547 "MediaEngine.c"
+       GstElement* result = NULL;
+       GError * _inner_error_;
+       GstElement* silence;
+       GstCaps* audio_cap;
+#line 746 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), NULL);
+#line 3554 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 747 "MediaEngine.vala"
+       silence = make_element ("audiotestsrc", &_inner_error_);
+#line 3558 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return NULL;
+       }
+#line 748 "MediaEngine.vala"
+       g_object_set (G_OBJECT (silence), "wave", 4, NULL);
+#line 749 "MediaEngine.vala"
+       audio_cap = view_media_engine_get_project_audio_caps (self);
+#line 3567 "MediaEngine.c"
+       {
+               GList* pad_collection;
+               GList* pad_it;
+#line 750 "MediaEngine.vala"
+               pad_collection = silence->pads;
+#line 3573 "MediaEngine.c"
+               for (pad_it = pad_collection; pad_it != NULL; pad_it = pad_it->next) {
+                       GstPad* pad;
+#line 750 "MediaEngine.vala"
+                       pad = _gst_object_ref0 ((GstPad*) pad_it->data);
+#line 3578 "MediaEngine.c"
+                       {
+#line 751 "MediaEngine.vala"
+                               gst_pad_set_caps (pad, audio_cap);
+#line 3582 "MediaEngine.c"
+                               _gst_object_unref0 (pad);
+                       }
+               }
+       }
+       result = silence;
+       _gst_caps_unref0 (audio_cap);
+#line 753 "MediaEngine.vala"
+       return result;
+#line 3591 "MediaEngine.c"
+}
+
+
+#line 756 "MediaEngine.vala"
+gint view_media_engine_get_sample_rate (ViewMediaEngine* self) {
+#line 3597 "MediaEngine.c"
+       gint result = 0;
+#line 756 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), 0);
+#line 3601 "MediaEngine.c"
+       result = 48000;
+#line 757 "MediaEngine.vala"
+       return result;
+#line 3605 "MediaEngine.c"
+}
+
+
+#line 760 "MediaEngine.vala"
+gint view_media_engine_get_sample_width (ViewMediaEngine* self) {
+#line 3611 "MediaEngine.c"
+       gint result = 0;
+#line 760 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), 0);
+#line 3615 "MediaEngine.c"
+       result = 16;
+#line 761 "MediaEngine.vala"
+       return result;
+#line 3619 "MediaEngine.c"
+}
+
+
+#line 764 "MediaEngine.vala"
+gint view_media_engine_get_sample_depth (ViewMediaEngine* self) {
+#line 3625 "MediaEngine.c"
+       gint result = 0;
+#line 764 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), 0);
+#line 3629 "MediaEngine.c"
+       result = 16;
+#line 765 "MediaEngine.vala"
+       return result;
+#line 3633 "MediaEngine.c"
+}
+
+
+#line 768 "MediaEngine.vala"
+PlayState view_media_engine_get_play_state (ViewMediaEngine* self) {
+#line 3639 "MediaEngine.c"
+       PlayState result = 0;
+#line 768 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), 0);
+#line 3643 "MediaEngine.c"
+       result = self->play_state;
+#line 769 "MediaEngine.vala"
+       return result;
+#line 3647 "MediaEngine.c"
+}
+
+
+#line 772 "MediaEngine.vala"
+void view_media_engine_set_play_state (ViewMediaEngine* self, PlayState play_state) {
+#line 772 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 773 "MediaEngine.vala"
+       self->play_state = play_state;
+#line 3657 "MediaEngine.c"
+}
+
+
+#line 776 "MediaEngine.vala"
+GstCaps* view_media_engine_build_audio_caps (ViewMediaEngine* self, gint num_channels) {
+#line 3663 "MediaEngine.c"
+       GstCaps* result = NULL;
+       char* caps;
+       char* _tmp0_;
+#line 776 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), NULL);
+#line 777 "MediaEngine.vala"
+       caps = g_strdup ("audio/x-raw-int,rate=%d,channels=%d,width=%d,depth=%d");
+#line 778 "MediaEngine.vala"
+       caps = (_tmp0_ = g_strdup_printf (caps, view_media_engine_get_sample_rate (self), num_channels, view_media_engine_get_sample_width (self), view_media_engine_get_sample_depth (self)), _g_free0 (caps), _tmp0_);
+#line 3673 "MediaEngine.c"
+       result = gst_caps_from_string (caps);
+       _g_free0 (caps);
+#line 779 "MediaEngine.vala"
+       return result;
+#line 3678 "MediaEngine.c"
+}
+
+
+#line 782 "MediaEngine.vala"
+GstCaps* view_media_engine_get_project_audio_caps (ViewMediaEngine* self) {
+#line 3684 "MediaEngine.c"
+       GstCaps* result = NULL;
+#line 782 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), NULL);
+#line 3688 "MediaEngine.c"
+       result = view_media_engine_build_audio_caps (self, CHANNELS_PER_TRACK_PLAYBACK);
+#line 783 "MediaEngine.vala"
+       return result;
+#line 3692 "MediaEngine.c"
+}
+
+
+#line 786 "MediaEngine.vala"
+GstCaps* view_media_engine_get_project_audio_export_caps (ViewMediaEngine* self) {
+#line 3698 "MediaEngine.c"
+       GstCaps* result = NULL;
+#line 786 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), NULL);
+#line 3702 "MediaEngine.c"
+       result = gst_caps_from_string ("audio/x-raw-float,rate=48000,channels=2,width=32");
+#line 787 "MediaEngine.vala"
+       return result;
+#line 3706 "MediaEngine.c"
+}
+
+
+#line 791 "MediaEngine.vala"
+static void view_media_engine_on_warning (ViewMediaEngine* self, GstBus* bus, GstMessage* message) {
+#line 3712 "MediaEngine.c"
+       GError* _error_;
+       char* text;
+       char* _tmp3_;
+       char* _tmp2_ = NULL;
+       GError* _tmp1_;
+       GError* _tmp0_ = NULL;
+#line 791 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 791 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_BUS (bus));
+#line 791 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_MESSAGE (message));
+#line 792 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_warning");
+#line 3727 "MediaEngine.c"
+       _error_ = NULL;
+       text = NULL;
+#line 795 "MediaEngine.vala"
+       (gst_message_parse_warning (message, &_tmp0_, &_tmp2_), _error_ = (_tmp1_ = _tmp0_, _g_error_free0 (_error_), _tmp1_));
+#line 795 "MediaEngine.vala"
+       text = (_tmp3_ = _tmp2_, _g_free0 (text), _tmp3_);
+#line 796 "MediaEngine.vala"
+       g_warning ("MediaEngine.vala:796: %s", text);
+#line 3736 "MediaEngine.c"
+       _g_error_free0 (_error_);
+       _g_free0 (text);
+}
+
+
+#line 799 "MediaEngine.vala"
+static void view_media_engine_on_error (ViewMediaEngine* self, GstBus* bus, GstMessage* message) {
+#line 3744 "MediaEngine.c"
+       GError* _error_;
+       char* text;
+       char* _tmp3_;
+       char* _tmp2_ = NULL;
+       GError* _tmp1_;
+       GError* _tmp0_ = NULL;
+#line 799 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 799 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_BUS (bus));
+#line 799 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_MESSAGE (message));
+#line 800 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_error");
+#line 3759 "MediaEngine.c"
+       _error_ = NULL;
+       text = NULL;
+#line 803 "MediaEngine.vala"
+       (gst_message_parse_error (message, &_tmp0_, &_tmp2_), _error_ = (_tmp1_ = _tmp0_, _g_error_free0 (_error_), _tmp1_));
+#line 803 "MediaEngine.vala"
+       text = (_tmp3_ = _tmp2_, _g_free0 (text), _tmp3_);
+#line 804 "MediaEngine.vala"
+       g_warning ("MediaEngine.vala:804: %s", text);
+#line 805 "MediaEngine.vala"
+       model_project_print_graph (self->priv->project, GST_BIN (self->pipeline), "bus_error");
+#line 3770 "MediaEngine.c"
+       _g_error_free0 (_error_);
+       _g_free0 (text);
+}
+
+
+#line 808 "MediaEngine.vala"
+static void view_media_engine_on_eos (ViewMediaEngine* self, GstBus* bus, GstMessage* message) {
+#line 808 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 808 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_BUS (bus));
+#line 808 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_MESSAGE (message));
+#line 809 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_eos");
+#line 810 "MediaEngine.vala"
+       if (self->play_state == PLAY_STATE_EXPORTING) {
+#line 811 "MediaEngine.vala"
+               gst_element_set_state (GST_ELEMENT (self->pipeline), GST_STATE_NULL);
+#line 3790 "MediaEngine.c"
+       }
+}
+
+
+#line 1168 "glib-2.0.vapi"
+static const char* string_to_string (const char* self) {
+#line 3797 "MediaEngine.c"
+       const char* result = NULL;
+#line 1168 "glib-2.0.vapi"
+       g_return_val_if_fail (self != NULL, NULL);
+#line 3801 "MediaEngine.c"
+       result = self;
+#line 1169 "glib-2.0.vapi"
+       return result;
+#line 3805 "MediaEngine.c"
+}
+
+
+static GValue* _gst_value_dup (GValue* self) {
+       GValue* dup;
+       dup = g_new0 (GValue, 1);
+       memcpy (dup, self, sizeof (GValue));
+       return dup;
+}
+
+
+static gpointer __gst_value_dup0 (gpointer self) {
+       return self ? _gst_value_dup (self) : NULL;
+}
+
+
+#line 814 "MediaEngine.vala"
+static void view_media_engine_on_element (ViewMediaEngine* self, GstBus* bus, GstMessage* message) {
+#line 3824 "MediaEngine.c"
+       const GstStructure* structure;
+       gboolean _tmp0_ = FALSE;
+#line 814 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 814 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_BUS (bus));
+#line 814 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_MESSAGE (message));
+#line 815 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_element");
+#line 816 "MediaEngine.vala"
+       structure = gst_message_get_structure (message);
+#line 818 "MediaEngine.vala"
+       if (self->play_state == PLAY_STATE_PLAYING) {
+#line 818 "MediaEngine.vala"
+               _tmp0_ = _vala_strcmp0 (string_to_string (gst_structure_get_name (structure)), "level") == 0;
+#line 3841 "MediaEngine.c"
+       } else {
+#line 818 "MediaEngine.vala"
+               _tmp0_ = FALSE;
+#line 3845 "MediaEngine.c"
+       }
+#line 818 "MediaEngine.vala"
+       if (_tmp0_) {
+#line 3849 "MediaEngine.c"
+               GValue* rms;
+               guint size;
+               GValue* temp;
+               double level_left;
+               double level_right;
+#line 819 "MediaEngine.vala"
+               rms = __gst_value_dup0 (gst_structure_get_value (structure, "rms"));
+#line 820 "MediaEngine.vala"
+               size = gst_value_list_get_size (rms);
+#line 821 "MediaEngine.vala"
+               temp = __gst_value_dup0 (gst_value_list_get_value (rms, (guint) 0));
+#line 822 "MediaEngine.vala"
+               level_left = g_value_get_double (temp);
+#line 823 "MediaEngine.vala"
+               level_right = level_left;
+#line 825 "MediaEngine.vala"
+               if (size > 1) {
+#line 3867 "MediaEngine.c"
+                       GValue* _tmp1_;
+#line 826 "MediaEngine.vala"
+                       temp = (_tmp1_ = __gst_value_dup0 (gst_value_list_get_value (rms, (guint) 1)), _g_free0 (temp), _tmp1_);
+#line 827 "MediaEngine.vala"
+                       level_right = g_value_get_double (temp);
+#line 3873 "MediaEngine.c"
+               }
+#line 829 "MediaEngine.vala"
+               g_signal_emit_by_name (self, "level-changed", message->src, level_left, level_right);
+#line 3877 "MediaEngine.c"
+               _g_free0 (rms);
+               _g_free0 (temp);
+       }
+}
+
+
+#line 833 "MediaEngine.vala"
+static void view_media_engine_on_state_change (ViewMediaEngine* self, GstBus* bus, GstMessage* message) {
+#line 3886 "MediaEngine.c"
+       GstState old_state = 0;
+       GstState new_state = 0;
+       GstState pending = 0;
+       char* _tmp2_;
+#line 833 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 833 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_BUS (bus));
+#line 833 "MediaEngine.vala"
+       g_return_if_fail (GST_IS_MESSAGE (message));
+#line 834 "MediaEngine.vala"
+       if (message->src != GST_OBJECT (self->pipeline)) {
+#line 3899 "MediaEngine.c"
+               char* _tmp1_;
+               char* _tmp0_;
+#line 835 "MediaEngine.vala"
+               logging_emit (G_OBJECT (self), LOGGING_FACILITY_GRAPH, LOGGING_LEVEL_VERBOSE, _tmp1_ = g_strdup_printf ("on_state_change returning.  message from %s", _tmp0_ = gst_object_get_name (message->src)));
+#line 3904 "MediaEngine.c"
+               _g_free0 (_tmp1_);
+               _g_free0 (_tmp0_);
+#line 837 "MediaEngine.vala"
+               return;
+#line 3909 "MediaEngine.c"
+       }
+#line 844 "MediaEngine.vala"
+       gst_message_parse_state_changed (message, &old_state, &new_state, &pending);
+#line 846 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_GRAPH, LOGGING_LEVEL_INFO, _tmp2_ = g_strdup_printf ("on_state_change old(%s) new(%s) pending(%s)", gst_element_state_get_name (old_state), gst_element_state_get_name (new_state), gst_element_state_get_name (pending)));
+#line 3915 "MediaEngine.c"
+       _g_free0 (_tmp2_);
+#line 849 "MediaEngine.vala"
+       if (new_state == self->gst_state) {
+#line 850 "MediaEngine.vala"
+               return;
+#line 3921 "MediaEngine.c"
+       }
+#line 852 "MediaEngine.vala"
+       self->gst_state = new_state;
+#line 853 "MediaEngine.vala"
+       view_media_engine_do_state_change (self);
+#line 3927 "MediaEngine.c"
+}
+
+
+#line 856 "MediaEngine.vala"
+gboolean view_media_engine_do_state_change (ViewMediaEngine* self) {
+#line 3933 "MediaEngine.c"
+       gboolean result = FALSE;
+       GError * _inner_error_;
+#line 856 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), FALSE);
+#line 3938 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 857 "MediaEngine.vala"
+       g_signal_emit_by_name (self, "playstate-changed");
+#line 858 "MediaEngine.vala"
+       switch (self->play_state) {
+#line 3944 "MediaEngine.c"
+               case PLAY_STATE_STOPPED:
+               {
+#line 860 "MediaEngine.vala"
+                       if (self->gst_state != GST_STATE_PAUSED) {
+#line 861 "MediaEngine.vala"
+                               gst_element_set_state (GST_ELEMENT (self->pipeline), GST_STATE_PAUSED);
+#line 3951 "MediaEngine.c"
+                       } else {
+#line 863 "MediaEngine.vala"
+                               view_media_engine_go (self, self->position);
+#line 3955 "MediaEngine.c"
+                       }
+                       result = TRUE;
+#line 865 "MediaEngine.vala"
+                       return result;
+#line 3960 "MediaEngine.c"
+               }
+               case PLAY_STATE_PRE_EXPORT:
+               {
+#line 867 "MediaEngine.vala"
+                       if (self->gst_state != GST_STATE_PAUSED) {
+#line 3966 "MediaEngine.c"
+                               result = FALSE;
+#line 868 "MediaEngine.vala"
+                               return result;
+#line 3970 "MediaEngine.c"
+                       }
+#line 870 "MediaEngine.vala"
+                       view_media_engine_do_paused_state_export (self);
+#line 3974 "MediaEngine.c"
+                       result = TRUE;
+#line 871 "MediaEngine.vala"
+                       return result;
+#line 3978 "MediaEngine.c"
+               }
+               case PLAY_STATE_EXPORTING:
+               {
+#line 873 "MediaEngine.vala"
+                       if (self->gst_state != GST_STATE_NULL) {
+#line 3984 "MediaEngine.c"
+                               result = FALSE;
+#line 874 "MediaEngine.vala"
+                               return result;
+#line 3988 "MediaEngine.c"
+                       }
+#line 875 "MediaEngine.vala"
+                       view_media_engine_end_export (self, FALSE);
+#line 3992 "MediaEngine.c"
+                       result = TRUE;
+#line 876 "MediaEngine.vala"
+                       return result;
+#line 3996 "MediaEngine.c"
+               }
+               case PLAY_STATE_CANCEL_EXPORT:
+               {
+#line 878 "MediaEngine.vala"
+                       if (self->gst_state != GST_STATE_NULL) {
+#line 4002 "MediaEngine.c"
+                               result = FALSE;
+#line 879 "MediaEngine.vala"
+                               return result;
+#line 4006 "MediaEngine.c"
+                       }
+#line 880 "MediaEngine.vala"
+                       view_media_engine_end_export (self, TRUE);
+#line 4010 "MediaEngine.c"
+                       result = TRUE;
+#line 881 "MediaEngine.vala"
+                       return result;
+#line 4014 "MediaEngine.c"
+               }
+               case PLAY_STATE_CLOSING:
+               {
+#line 883 "MediaEngine.vala"
+                       view_media_engine_close (self);
+#line 4020 "MediaEngine.c"
+                       result = TRUE;
+#line 884 "MediaEngine.vala"
+                       return result;
+#line 4024 "MediaEngine.c"
+               }
+               case PLAY_STATE_PRE_RECORD_NULL:
+               {
+#line 886 "MediaEngine.vala"
+                       if (self->gst_state == GST_STATE_NULL) {
+#line 4030 "MediaEngine.c"
+                               {
+#line 888 "MediaEngine.vala"
+                                       view_media_engine_start_record (self, self->record_region, &_inner_error_);
+#line 4034 "MediaEngine.c"
+                                       if (_inner_error_ != NULL) {
+                                               goto __catch10_g_error;
+                                       }
+                               }
+                               goto __finally10;
+                               __catch10_g_error:
+                               {
+                                       GError * _error_;
+                                       _error_ = _inner_error_;
+                                       _inner_error_ = NULL;
+                                       {
+#line 890 "MediaEngine.vala"
+                                               g_signal_emit_by_name (self, "error-occurred", "An error occurred starting the recording.", NULL);
+#line 891 "MediaEngine.vala"
+                                               g_warning ("MediaEngine.vala:891: An error occurred starting the recording: %s", _error_->message);
+#line 4050 "MediaEngine.c"
+                                               _g_error_free0 (_error_);
+                                       }
+                               }
+                               __finally10:
+                               if (_inner_error_ != NULL) {
+                                       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);
+                                       g_clear_error (&_inner_error_);
+                                       return FALSE;
+                               }
+                               result = TRUE;
+#line 893 "MediaEngine.vala"
+                               return result;
+#line 4063 "MediaEngine.c"
+                       }
+#line 895 "MediaEngine.vala"
+                       break;
+#line 4067 "MediaEngine.c"
+               }
+               case PLAY_STATE_PRE_RECORD:
+               {
+#line 897 "MediaEngine.vala"
+                       if (self->gst_state == GST_STATE_PAUSED) {
+#line 898 "MediaEngine.vala"
+                               view_media_engine_do_play (self, PLAY_STATE_RECORDING);
+#line 4075 "MediaEngine.c"
+                               result = TRUE;
+#line 899 "MediaEngine.vala"
+                               return result;
+#line 4079 "MediaEngine.c"
+                       }
+#line 901 "MediaEngine.vala"
+                       break;
+#line 4083 "MediaEngine.c"
+               }
+               case PLAY_STATE_POST_RECORD:
+               {
+#line 903 "MediaEngine.vala"
+                       if (self->gst_state != GST_STATE_NULL) {
+#line 904 "MediaEngine.vala"
+                               view_media_engine_set_gst_state (self, GST_STATE_NULL);
+#line 4091 "MediaEngine.c"
+                       } else {
+#line 906 "MediaEngine.vala"
+                               view_media_engine_post_record (self);
+#line 907 "MediaEngine.vala"
+                               view_media_engine_set_gst_state (self, GST_STATE_PAUSED);
+#line 908 "MediaEngine.vala"
+                               self->play_state = PLAY_STATE_STOPPED;
+#line 4099 "MediaEngine.c"
+                       }
+                       result = TRUE;
+#line 910 "MediaEngine.vala"
+                       return result;
+#line 4104 "MediaEngine.c"
+               }
+       }
+       result = FALSE;
+#line 912 "MediaEngine.vala"
+       return result;
+#line 4110 "MediaEngine.c"
+}
+
+
+#line 915 "MediaEngine.vala"
+static void view_media_engine_real_do_null_state_export (ViewMediaEngine* self, gint64 length) {
+#line 915 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 916 "MediaEngine.vala"
+       g_signal_emit_by_name (self, "pre-export", length);
+#line 917 "MediaEngine.vala"
+       self->play_state = PLAY_STATE_PRE_EXPORT;
+#line 918 "MediaEngine.vala"
+       gst_element_set_state (GST_ELEMENT (self->pipeline), GST_STATE_PAUSED);
+#line 4124 "MediaEngine.c"
+}
+
+
+#line 915 "MediaEngine.vala"
+void view_media_engine_do_null_state_export (ViewMediaEngine* self, gint64 length) {
+#line 915 "MediaEngine.vala"
+       VIEW_MEDIA_ENGINE_GET_CLASS (self)->do_null_state_export (self, length);
+#line 4132 "MediaEngine.c"
+}
+
+
+#line 952 "MediaEngine.vala"
+static gboolean _view_media_engine_on_callback_gsource_func (gpointer self) {
+#line 4138 "MediaEngine.c"
+       gboolean result;
+       result = view_media_engine_on_callback (self);
+       return result;
+}
+
+
+#line 921 "MediaEngine.vala"
+static void view_media_engine_do_paused_state_export (ViewMediaEngine* self) {
+#line 921 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 922 "MediaEngine.vala"
+       self->play_state = PLAY_STATE_EXPORTING;
+#line 924 "MediaEngine.vala"
+       if (self->priv->callback_id == 0) {
+#line 925 "MediaEngine.vala"
+               self->priv->callback_id = g_timeout_add_full (G_PRIORITY_DEFAULT, (guint) 50, _view_media_engine_on_callback_gsource_func, g_object_ref (self), g_object_unref);
+#line 4155 "MediaEngine.c"
+       }
+#line 926 "MediaEngine.vala"
+       gst_element_set_state (GST_ELEMENT (self->pipeline), GST_STATE_PLAYING);
+#line 4159 "MediaEngine.c"
+}
+
+
+#line 929 "MediaEngine.vala"
+static void view_media_engine_end_export (ViewMediaEngine* self, gboolean deleted) {
+#line 929 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 930 "MediaEngine.vala"
+       self->play_state = PLAY_STATE_STOPPED;
+#line 932 "MediaEngine.vala"
+       self->priv->callback_id = (guint) 0;
+#line 933 "MediaEngine.vala"
+       g_signal_emit_by_name (self, "post-export", deleted);
+#line 4173 "MediaEngine.c"
+}
+
+
+#line 936 "MediaEngine.vala"
+void view_media_engine_go (ViewMediaEngine* self, gint64 pos) {
+#line 936 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 937 "MediaEngine.vala"
+       if (self->position == pos) {
+#line 938 "MediaEngine.vala"
+               gst_element_seek_simple (GST_ELEMENT (self->pipeline), GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, self->position);
+#line 939 "MediaEngine.vala"
+               return;
+#line 4187 "MediaEngine.c"
+       }
+#line 941 "MediaEngine.vala"
+       if (pos < 0) {
+#line 942 "MediaEngine.vala"
+               self->position = (gint64) 0;
+#line 4193 "MediaEngine.c"
+       } else {
+#line 944 "MediaEngine.vala"
+               self->position = pos;
+#line 4197 "MediaEngine.c"
+       }
+#line 948 "MediaEngine.vala"
+       gst_element_seek_simple (GST_ELEMENT (self->pipeline), GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, self->position);
+#line 949 "MediaEngine.vala"
+       g_signal_emit_by_name (self, "position-changed", self->position);
+#line 4203 "MediaEngine.c"
+}
+
+
+#line 952 "MediaEngine.vala"
+static gboolean view_media_engine_on_callback (ViewMediaEngine* self) {
+#line 4209 "MediaEngine.c"
+       gboolean result = FALSE;
+       gboolean _tmp0_ = FALSE;
+       gboolean _tmp1_ = FALSE;
+       GstFormat format;
+       gint64 time;
+       gboolean _tmp2_ = FALSE;
+#line 952 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), FALSE);
+#line 953 "MediaEngine.vala"
+       if (self->play_state == PLAY_STATE_STOPPED) {
+#line 953 "MediaEngine.vala"
+               _tmp1_ = !self->playing;
+#line 4222 "MediaEngine.c"
+       } else {
+#line 953 "MediaEngine.vala"
+               _tmp1_ = FALSE;
+#line 4226 "MediaEngine.c"
+       }
+#line 953 "MediaEngine.vala"
+       if (_tmp1_) {
+#line 953 "MediaEngine.vala"
+               _tmp0_ = TRUE;
+#line 4232 "MediaEngine.c"
+       } else {
+#line 954 "MediaEngine.vala"
+               _tmp0_ = self->play_state == PLAY_STATE_POST_RECORD;
+#line 4236 "MediaEngine.c"
+       }
+#line 953 "MediaEngine.vala"
+       if (_tmp0_) {
+#line 955 "MediaEngine.vala"
+               self->priv->callback_id = (guint) 0;
+#line 4242 "MediaEngine.c"
+               result = FALSE;
+#line 956 "MediaEngine.vala"
+               return result;
+#line 4246 "MediaEngine.c"
+       }
+#line 959 "MediaEngine.vala"
+       format = GST_FORMAT_TIME;
+#line 960 "MediaEngine.vala"
+       time = (gint64) 0;
+#line 961 "MediaEngine.vala"
+       if (gst_element_query_position (GST_ELEMENT (self->pipeline), &format, &time)) {
+#line 961 "MediaEngine.vala"
+               _tmp2_ = format == GST_FORMAT_TIME;
+#line 4256 "MediaEngine.c"
+       } else {
+#line 961 "MediaEngine.vala"
+               _tmp2_ = FALSE;
+#line 4260 "MediaEngine.c"
+       }
+#line 961 "MediaEngine.vala"
+       if (_tmp2_) {
+#line 962 "MediaEngine.vala"
+               self->position = time;
+#line 963 "MediaEngine.vala"
+               g_signal_emit_by_name (self, "callback-pulse");
+#line 965 "MediaEngine.vala"
+               if (self->play_state == PLAY_STATE_PLAYING) {
+#line 966 "MediaEngine.vala"
+                       if (self->position >= model_project_get_length (self->priv->project)) {
+#line 967 "MediaEngine.vala"
+                               view_media_engine_go (self, model_project_get_length (self->priv->project));
+#line 968 "MediaEngine.vala"
+                               view_media_engine_pause (self);
+#line 4276 "MediaEngine.c"
+                       }
+#line 970 "MediaEngine.vala"
+                       g_signal_emit_by_name (self, "position-changed", time);
+#line 4280 "MediaEngine.c"
+               } else {
+#line 971 "MediaEngine.vala"
+                       if (self->play_state == PLAY_STATE_EXPORTING) {
+#line 972 "MediaEngine.vala"
+                               if (time > model_project_get_length (self->priv->project)) {
+#line 973 "MediaEngine.vala"
+                                       g_signal_emit_by_name (MULTI_FILE_PROGRESS_INTERFACE (self), "fraction-updated", 1.0);
+#line 4288 "MediaEngine.c"
+                               } else {
+#line 976 "MediaEngine.vala"
+                                       g_signal_emit_by_name (MULTI_FILE_PROGRESS_INTERFACE (self), "fraction-updated", time / ((double) model_project_get_length (self->priv->project)));
+#line 4292 "MediaEngine.c"
+                               }
+                       } else {
+#line 977 "MediaEngine.vala"
+                               if (self->play_state == PLAY_STATE_RECORDING) {
+#line 978 "MediaEngine.vala"
+                                       g_signal_emit_by_name (self, "position-changed", time);
+#line 4299 "MediaEngine.c"
+                               }
+                       }
+               }
+       }
+       result = TRUE;
+#line 981 "MediaEngine.vala"
+       return result;
+#line 4307 "MediaEngine.c"
+}
+
+
+#line 984 "MediaEngine.vala"
+static void view_media_engine_real_pause (ViewMediaEngine* self) {
+#line 984 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 985 "MediaEngine.vala"
+       if (model_project_transport_is_recording (self->priv->project)) {
+#line 986 "MediaEngine.vala"
+               gst_element_send_event (GST_ELEMENT (self->record_bin), gst_event_new_eos ());
+#line 987 "MediaEngine.vala"
+               self->play_state = PLAY_STATE_POST_RECORD;
+#line 4321 "MediaEngine.c"
+       } else {
+#line 989 "MediaEngine.vala"
+               if (!self->playing) {
+#line 990 "MediaEngine.vala"
+                       return;
+#line 4327 "MediaEngine.c"
+               }
+#line 992 "MediaEngine.vala"
+               self->play_state = PLAY_STATE_STOPPED;
+#line 4331 "MediaEngine.c"
+       }
+#line 994 "MediaEngine.vala"
+       view_media_engine_set_gst_state (self, GST_STATE_PAUSED);
+#line 995 "MediaEngine.vala"
+       self->playing = FALSE;
+#line 4337 "MediaEngine.c"
+}
+
+
+#line 984 "MediaEngine.vala"
+void view_media_engine_pause (ViewMediaEngine* self) {
+#line 984 "MediaEngine.vala"
+       VIEW_MEDIA_ENGINE_GET_CLASS (self)->pause (self);
+#line 4345 "MediaEngine.c"
+}
+
+
+#line 999 "MediaEngine.vala"
+void view_media_engine_set_gst_state (ViewMediaEngine* self, GstState state) {
+#line 999 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1000 "MediaEngine.vala"
+       if (gst_element_set_state (GST_ELEMENT (self->pipeline), state) == GST_STATE_CHANGE_FAILURE) {
+#line 1001 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:1001: can't set state");
+#line 4357 "MediaEngine.c"
+       }
+}
+
+
+#line 1004 "MediaEngine.vala"
+static void view_media_engine_seek (ViewMediaEngine* self, GstSeekFlags flags, gint64 pos) {
+#line 1004 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1008 "MediaEngine.vala"
+       gst_element_seek_simple (GST_ELEMENT (self->pipeline), GST_FORMAT_TIME, flags, pos);
+#line 4368 "MediaEngine.c"
+}
+
+
+#line 1011 "MediaEngine.vala"
+void view_media_engine_do_play (ViewMediaEngine* self, PlayState new_state) {
+#line 1011 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1012 "MediaEngine.vala"
+       view_media_engine_seek (self, GST_SEEK_FLAG_FLUSH, self->position);
+#line 1013 "MediaEngine.vala"
+       self->play_state = new_state;
+#line 1014 "MediaEngine.vala"
+       view_media_engine_play (self);
+#line 4382 "MediaEngine.c"
+}
+
+
+#line 1017 "MediaEngine.vala"
+static void view_media_engine_play (ViewMediaEngine* self) {
+#line 1017 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1018 "MediaEngine.vala"
+       if (self->playing) {
+#line 1019 "MediaEngine.vala"
+               return;
+#line 4394 "MediaEngine.c"
+       }
+#line 1021 "MediaEngine.vala"
+       view_media_engine_set_gst_state (self, GST_STATE_PLAYING);
+#line 1022 "MediaEngine.vala"
+       if (self->priv->callback_id == 0) {
+#line 1023 "MediaEngine.vala"
+               self->priv->callback_id = g_timeout_add_full (G_PRIORITY_DEFAULT, (guint) 50, _view_media_engine_on_callback_gsource_func, g_object_ref (self), g_object_unref);
+#line 4402 "MediaEngine.c"
+       }
+#line 1024 "MediaEngine.vala"
+       self->playing = TRUE;
+#line 4406 "MediaEngine.c"
+}
+
+
+#line 1027 "MediaEngine.vala"
+void view_media_engine_start_export (ViewMediaEngine* self, const char* filename) {
+#line 1027 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1027 "MediaEngine.vala"
+       g_return_if_fail (filename != NULL);
+#line 1028 "MediaEngine.vala"
+       g_signal_emit_by_name (MULTI_FILE_PROGRESS_INTERFACE (self), "file-updated", filename, 0);
+#line 1029 "MediaEngine.vala"
+       view_media_engine_do_null_state_export (self, model_project_get_length (self->priv->project));
+#line 4420 "MediaEngine.c"
+}
+
+
+#line 1032 "MediaEngine.vala"
+static void view_media_engine_real_cancel (MultiFileProgressInterface* base) {
+#line 4426 "MediaEngine.c"
+       ViewMediaEngine * self;
+       self = VIEW_MEDIA_ENGINE (base);
+#line 1033 "MediaEngine.vala"
+       self->play_state = PLAY_STATE_CANCEL_EXPORT;
+#line 1034 "MediaEngine.vala"
+       gst_element_set_state (GST_ELEMENT (self->pipeline), GST_STATE_NULL);
+#line 4433 "MediaEngine.c"
+}
+
+
+#line 1037 "MediaEngine.vala"
+static void view_media_engine_real_complete (MultiFileProgressInterface* base) {
+#line 4439 "MediaEngine.c"
+       ViewMediaEngine * self;
+       self = VIEW_MEDIA_ENGINE (base);
+#line 1038 "MediaEngine.vala"
+       gst_element_set_state (GST_ELEMENT (self->pipeline), GST_STATE_NULL);
+#line 4444 "MediaEngine.c"
+}
+
+
+#line 1041 "MediaEngine.vala"
+void view_media_engine_on_load_complete (ViewMediaEngine* self) {
+#line 1041 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1042 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_load_complete");
+#line 1043 "MediaEngine.vala"
+       self->play_state = PLAY_STATE_STOPPED;
+#line 1044 "MediaEngine.vala"
+       gst_element_set_state (GST_ELEMENT (self->pipeline), GST_STATE_PAUSED);
+#line 4458 "MediaEngine.c"
+}
+
+
+#line 1047 "MediaEngine.vala"
+void view_media_engine_on_callback_pulse (ViewMediaEngine* self) {
+#line 1047 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1048 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_callback_pulse");
+#line 1049 "MediaEngine.vala"
+       if (self->record_region != NULL) {
+#line 1050 "MediaEngine.vala"
+               model_clip_set_duration (self->record_region, self->position - model_clip_get_start (self->record_region));
+#line 4472 "MediaEngine.c"
+       }
+}
+
+
+#line 1054 "MediaEngine.vala"
+void view_media_engine_close (ViewMediaEngine* self) {
+#line 1054 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1055 "MediaEngine.vala"
+       if (self->gst_state != GST_STATE_NULL) {
+#line 1056 "MediaEngine.vala"
+               self->play_state = PLAY_STATE_CLOSING;
+#line 1057 "MediaEngine.vala"
+               view_media_engine_set_gst_state (self, GST_STATE_NULL);
+#line 4487 "MediaEngine.c"
+       } else {
+#line 1059 "MediaEngine.vala"
+               self->play_state = PLAY_STATE_CLOSED;
+#line 4491 "MediaEngine.c"
+       }
+#line 1061 "MediaEngine.vala"
+       g_signal_emit_by_name (self, "playstate-changed");
+#line 4495 "MediaEngine.c"
+}
+
+
+#line 1064 "MediaEngine.vala"
+void view_media_engine_post_record (ViewMediaEngine* self) {
+#line 4501 "MediaEngine.c"
+       GstBin* _tmp0_;
+       ModelClip* _tmp1_;
+       ModelAudioTrack* _tmp2_;
+       GstElement* _tmp4_;
+       GstElement* _tmp3_;
+       GstElement* _tmp6_;
+       GstElement* _tmp5_;
+#line 1064 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1065 "MediaEngine.vala"
+       g_assert (self->gst_state == GST_STATE_NULL);
+#line 1067 "MediaEngine.vala"
+       _model_track_delete_clip (MODEL_TRACK (self->record_track), self->record_region);
+#line 1069 "MediaEngine.vala"
+       gst_element_unlink_many (self->priv->audio_in, self->priv->record_capsfilter, self->priv->wav_encoder, self->priv->record_sink, NULL);
+#line 1070 "MediaEngine.vala"
+       gst_bin_remove_many (self->record_bin, self->priv->audio_in, self->priv->record_capsfilter, self->priv->wav_encoder, self->priv->record_sink, NULL);
+#line 1071 "MediaEngine.vala"
+       gst_bin_remove (GST_BIN (self->pipeline), GST_ELEMENT (self->record_bin));
+#line 1072 "MediaEngine.vala"
+       g_signal_emit_by_name (self, "record-completed");
+#line 1073 "MediaEngine.vala"
+       self->record_bin = (_tmp0_ = NULL, _gst_object_unref0 (self->record_bin), _tmp0_);
+#line 1074 "MediaEngine.vala"
+       self->record_region = (_tmp1_ = NULL, _g_object_unref0 (self->record_region), _tmp1_);
+#line 1075 "MediaEngine.vala"
+       self->record_track = (_tmp2_ = NULL, _g_object_unref0 (self->record_track), _tmp2_);
+#line 1076 "MediaEngine.vala"
+       self->priv->audio_in = (_tmp4_ = _gst_object_ref0 (self->priv->record_capsfilter = (_tmp3_ = NULL, _gst_object_unref0 (self->priv->record_capsfilter), _tmp3_)), _gst_object_unref0 (self->priv->audio_in), _tmp4_);
+#line 1077 "MediaEngine.vala"
+       self->priv->wav_encoder = (_tmp6_ = _gst_object_ref0 (self->priv->record_sink = (_tmp5_ = NULL, _gst_object_unref0 (self->priv->record_sink), _tmp5_)), _gst_object_unref0 (self->priv->wav_encoder), _tmp6_);
+#line 1078 "MediaEngine.vala"
+       view_media_engine_set_gst_state (self, GST_STATE_PAUSED);
+#line 4535 "MediaEngine.c"
+}
+
+
+#line 1081 "MediaEngine.vala"
+void view_media_engine_record (ViewMediaEngine* self, ModelAudioTrack* track) {
+#line 4541 "MediaEngine.c"
+       ModelAudioTrack* _tmp0_;
+       char* filename;
+       ModelClipFile* clip_file;
+       ModelClip* _tmp1_;
+#line 1081 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1081 "MediaEngine.vala"
+       g_return_if_fail (MODEL_IS_AUDIO_TRACK (track));
+#line 1082 "MediaEngine.vala"
+       g_assert (self->gst_state != GST_STATE_NULL);
+#line 1083 "MediaEngine.vala"
+       self->play_state = PLAY_STATE_PRE_RECORD_NULL;
+#line 1084 "MediaEngine.vala"
+       view_media_engine_set_gst_state (self, GST_STATE_NULL);
+#line 1085 "MediaEngine.vala"
+       self->record_track = (_tmp0_ = _g_object_ref0 (track), _g_object_unref0 (self->record_track), _tmp0_);
+#line 1087 "MediaEngine.vala"
+       filename = view_media_engine_new_audio_filename (self, MODEL_TRACK (track));
+#line 1088 "MediaEngine.vala"
+       clip_file = model_clip_file_new (filename, 0);
+#line 1089 "MediaEngine.vala"
+       self->record_region = (_tmp1_ = model_clip_new (clip_file, MODEL_MEDIA_TYPE_AUDIO, "", self->position, (gint64) 0, (gint64) 1, TRUE), _g_object_unref0 (self->record_region), _tmp1_);
+#line 4564 "MediaEngine.c"
+       _g_free0 (filename);
+       _g_object_unref0 (clip_file);
+}
+
+
+#line 1092 "MediaEngine.vala"
+void view_media_engine_start_record (ViewMediaEngine* self, ModelClip* region, GError** error) {
+#line 4572 "MediaEngine.c"
+       GError * _inner_error_;
+       GstBin* _tmp0_;
+       GstElement* _tmp1_;
+       GstElement* _tmp2_;
+       GValue _tmp4_;
+       GValue _tmp3_ = {0};
+       GstElement* _tmp5_;
+       GstElement* _tmp6_;
+       GstCaps* _tmp7_;
+       GstElement* _tmp8_;
+       GstElement* _tmp9_;
+       GstElement* _tmp10_;
+       GstElement* _tmp11_;
+#line 1092 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1092 "MediaEngine.vala"
+       g_return_if_fail (MODEL_IS_CLIP (region));
+#line 4590 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 1093 "MediaEngine.vala"
+       if (model_project_transport_is_recording (self->priv->project)) {
+#line 1094 "MediaEngine.vala"
+               return;
+#line 4596 "MediaEngine.c"
+       }
+#line 1096 "MediaEngine.vala"
+       if (model_project_transport_is_playing (self->priv->project)) {
+#line 1097 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:1097: can't switch from playing to recording");
+#line 4602 "MediaEngine.c"
+       }
+#line 1099 "MediaEngine.vala"
+       if (self->gst_state != GST_STATE_NULL) {
+#line 1100 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:1100: can't record now: %s", gst_element_state_get_name (self->gst_state));
+#line 4608 "MediaEngine.c"
+       }
+#line 1101 "MediaEngine.vala"
+       self->record_bin = (_tmp0_ = (GstBin*) gst_bin_new ("recordingbin"), _gst_object_unref0 (self->record_bin), _tmp0_);
+#line 1102 "MediaEngine.vala"
+       _model_track_move (MODEL_TRACK (self->record_track), self->record_region, self->position);
+#line 1103 "MediaEngine.vala"
+       g_signal_emit_by_name (MODEL_TRACK (self->record_track), "clip-added", self->record_region, TRUE);
+#line 1104 "MediaEngine.vala"
+       _tmp1_ = make_element ("pulsesrc", &_inner_error_);
+#line 4618 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return;
+       }
+#line 1104 "MediaEngine.vala"
+       self->priv->audio_in = (_tmp2_ = _tmp1_, _gst_object_unref0 (self->priv->audio_in), _tmp2_);
+#line 1105 "MediaEngine.vala"
+       g_object_set_property (G_OBJECT (self->priv->audio_in), "device", (_tmp4_ = (g_value_init (&_tmp3_, G_TYPE_STRING), g_value_set_string (&_tmp3_, "source.hw0"), _tmp3_), &_tmp4_));
+#line 1106 "MediaEngine.vala"
+       _tmp5_ = make_element ("capsfilter", &_inner_error_);
+#line 4629 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return;
+       }
+#line 1106 "MediaEngine.vala"
+       self->priv->record_capsfilter = (_tmp6_ = _tmp5_, _gst_object_unref0 (self->priv->record_capsfilter), _tmp6_);
+#line 1107 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->priv->record_capsfilter), "caps", _tmp7_ = view_media_engine_get_record_audio_caps (self), NULL);
+#line 4638 "MediaEngine.c"
+       _gst_caps_unref0 (_tmp7_);
+#line 1108 "MediaEngine.vala"
+       _tmp8_ = make_element ("filesink", &_inner_error_);
+#line 4642 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return;
+       }
+#line 1108 "MediaEngine.vala"
+       self->priv->record_sink = (_tmp9_ = _tmp8_, _gst_object_unref0 (self->priv->record_sink), _tmp9_);
+#line 1109 "MediaEngine.vala"
+       g_object_set (G_OBJECT (self->priv->record_sink), "location", self->record_region->clipfile->filename, NULL);
+#line 1110 "MediaEngine.vala"
+       _tmp10_ = make_element ("wavenc", &_inner_error_);
+#line 4653 "MediaEngine.c"
+       if (_inner_error_ != NULL) {
+               g_propagate_error (error, _inner_error_);
+               return;
+       }
+#line 1110 "MediaEngine.vala"
+       self->priv->wav_encoder = (_tmp11_ = _tmp10_, _gst_object_unref0 (self->priv->wav_encoder), _tmp11_);
+#line 1112 "MediaEngine.vala"
+       gst_bin_add_many (self->record_bin, _gst_object_ref0 (self->priv->audio_in), _gst_object_ref0 (self->priv->record_capsfilter), _gst_object_ref0 (self->priv->wav_encoder), _gst_object_ref0 (self->priv->record_sink), NULL);
+#line 1113 "MediaEngine.vala"
+       if (!gst_element_link_many (self->priv->audio_in, self->priv->record_capsfilter, self->priv->wav_encoder, self->priv->record_sink, NULL)) {
+#line 1114 "MediaEngine.vala"
+               g_error ("MediaEngine.vala:1114: audio_in: couldn't link");
+#line 4666 "MediaEngine.c"
+       }
+#line 1115 "MediaEngine.vala"
+       gst_bin_add (GST_BIN (self->pipeline), _gst_object_ref0 (GST_ELEMENT (self->record_bin)));
+#line 1117 "MediaEngine.vala"
+       self->play_state = PLAY_STATE_PRE_RECORD;
+#line 1118 "MediaEngine.vala"
+       view_media_engine_set_gst_state (self, GST_STATE_PAUSED);
+#line 4674 "MediaEngine.c"
+}
+
+
+#line 1121 "MediaEngine.vala"
+GstCaps* view_media_engine_get_record_audio_caps (ViewMediaEngine* self) {
+#line 4680 "MediaEngine.c"
+       GstCaps* result = NULL;
+#line 1121 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), NULL);
+#line 4684 "MediaEngine.c"
+       result = view_media_engine_build_audio_caps (self, CHANNELS_PER_TRACK_RECORD);
+#line 1122 "MediaEngine.vala"
+       return result;
+#line 4688 "MediaEngine.c"
+}
+
+
+#line 1125 "MediaEngine.vala"
+static char* view_media_engine_new_audio_filename (ViewMediaEngine* self, ModelTrack* track) {
+#line 4694 "MediaEngine.c"
+       char* result = NULL;
+       gint i;
+       char* base_path;
+       char* _tmp0_;
+       char* _tmp1_;
+       char* base_name;
+#line 1125 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), NULL);
+#line 1125 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 1126 "MediaEngine.vala"
+       i = 1;
+#line 1127 "MediaEngine.vala"
+       base_path = model_project_get_audio_path (self->priv->project);
+#line 1128 "MediaEngine.vala"
+       g_mkdir (base_path, 0777);
+#line 1129 "MediaEngine.vala"
+       base_name = (_tmp1_ = g_build_filename (base_path, _tmp0_ = view_media_engine_generate_base (self, track->display_name), NULL), _g_free0 (_tmp0_), _tmp1_);
+#line 1130 "MediaEngine.vala"
+       while (TRUE) {
+#line 4715 "MediaEngine.c"
+               char* name;
+#line 1131 "MediaEngine.vala"
+               name = g_strdup_printf ("%s_%d.wav", base_name, i);
+#line 1132 "MediaEngine.vala"
+               if (!g_file_test (name, G_FILE_TEST_EXISTS)) {
+#line 4721 "MediaEngine.c"
+                       result = name;
+                       _g_free0 (base_path);
+                       _g_free0 (base_name);
+#line 1133 "MediaEngine.vala"
+                       return result;
+#line 4727 "MediaEngine.c"
+               }
+#line 1135 "MediaEngine.vala"
+               i = i + 1;
+#line 4731 "MediaEngine.c"
+               _g_free0 (name);
+       }
+       _g_free0 (base_path);
+       _g_free0 (base_name);
+}
+
+
+#line 1139 "MediaEngine.vala"
+static char* view_media_engine_generate_base (ViewMediaEngine* self, const char* name) {
+#line 4741 "MediaEngine.c"
+       char* result = NULL;
+       char* base_name;
+#line 1139 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), NULL);
+#line 1139 "MediaEngine.vala"
+       g_return_val_if_fail (name != NULL, NULL);
+#line 1140 "MediaEngine.vala"
+       base_name = g_utf8_strdown (name, -1);
+#line 1141 "MediaEngine.vala"
+       g_strcanon (base_name, "abcdefghijklmnopqrstuvwxyz1234567890", '_');
+#line 4752 "MediaEngine.c"
+       result = base_name;
+#line 1142 "MediaEngine.vala"
+       return result;
+#line 4756 "MediaEngine.c"
+}
+
+
+#line 1180 "MediaEngine.vala"
+static void _view_media_engine_on_track_removed_view_media_track_track_removed (ViewMediaTrack* _sender, ViewMediaTrack* track, gpointer self) {
+#line 4762 "MediaEngine.c"
+       view_media_engine_on_track_removed (self, track);
+}
+
+
+#line 1185 "MediaEngine.vala"
+static void _view_media_engine_on_error_occurred_view_media_track_error_occurred (ViewMediaTrack* _sender, const char* major_message, const char* minor_message, gpointer self) {
+#line 4769 "MediaEngine.c"
+       view_media_engine_on_error_occurred (self, major_message, minor_message);
+}
+
+
+#line 1145 "MediaEngine.vala"
+void view_media_engine_on_track_added (ViewMediaEngine* self, ModelTrack* track) {
+#line 4776 "MediaEngine.c"
+       GError * _inner_error_;
+       ViewMediaTrack* media_track;
+#line 1145 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1145 "MediaEngine.vala"
+       g_return_if_fail (MODEL_IS_TRACK (track));
+#line 4783 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 1146 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_track_added");
+#line 1147 "MediaEngine.vala"
+       media_track = NULL;
+#line 4789 "MediaEngine.c"
+       {
+#line 1149 "MediaEngine.vala"
+               switch (model_track_media_type (track)) {
+#line 4793 "MediaEngine.c"
+                       case MODEL_MEDIA_TYPE_AUDIO:
+                       {
+                               ViewMediaTrack* _tmp0_;
+                               ViewMediaTrack* _tmp1_;
+#line 1151 "MediaEngine.vala"
+                               _tmp0_ = view_media_engine_create_audio_track (self, track, &_inner_error_);
+#line 4800 "MediaEngine.c"
+                               if (_inner_error_ != NULL) {
+                                       goto __catch11_g_error;
+                               }
+#line 1151 "MediaEngine.vala"
+                               media_track = (_tmp1_ = _tmp0_, _g_object_unref0 (media_track), _tmp1_);
+#line 1152 "MediaEngine.vala"
+                               break;
+#line 4808 "MediaEngine.c"
+                       }
+                       case MODEL_MEDIA_TYPE_VIDEO:
+                       {
+                               ViewMediaVideoTrack* _tmp2_;
+                               ViewMediaTrack* _tmp3_;
+#line 1154 "MediaEngine.vala"
+                               _tmp2_ = view_media_video_track_new (self, track, self->converter, &_inner_error_);
+#line 4816 "MediaEngine.c"
+                               if (_inner_error_ != NULL) {
+                                       goto __catch11_g_error;
+                               }
+#line 1154 "MediaEngine.vala"
+                               media_track = (_tmp3_ = VIEW_MEDIA_TRACK (_tmp2_), _g_object_unref0 (media_track), _tmp3_);
+#line 1155 "MediaEngine.vala"
+                               break;
+#line 4824 "MediaEngine.c"
+                       }
+               }
+       }
+       goto __finally11;
+       __catch11_g_error:
+       {
+               GError * _error_;
+               _error_ = _inner_error_;
+               _inner_error_ = NULL;
+               {
+#line 1158 "MediaEngine.vala"
+                       g_signal_emit_by_name (self, "error-occurred", "An error occurred adding the track.", NULL);
+#line 1159 "MediaEngine.vala"
+                       g_warning ("MediaEngine.vala:1159: An error occurred adding the track: %s", _error_->message);
+#line 4839 "MediaEngine.c"
+                       _g_error_free0 (_error_);
+                       _g_object_unref0 (media_track);
+#line 1160 "MediaEngine.vala"
+                       return;
+#line 4844 "MediaEngine.c"
+               }
+       }
+       __finally11:
+       if (_inner_error_ != NULL) {
+               _g_object_unref0 (media_track);
+               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);
+               g_clear_error (&_inner_error_);
+               return;
+       }
+#line 1163 "MediaEngine.vala"
+       g_signal_connect_object (media_track, "track-removed", (GCallback) _view_media_engine_on_track_removed_view_media_track_track_removed, self, 0);
+#line 1164 "MediaEngine.vala"
+       g_signal_connect_object (media_track, "error-occurred", (GCallback) _view_media_engine_on_error_occurred_view_media_track_error_occurred, self, 0);
+#line 1166 "MediaEngine.vala"
+       gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->tracks), media_track);
+#line 4860 "MediaEngine.c"
+       _g_object_unref0 (media_track);
+}
+
+
+#line 1169 "MediaEngine.vala"
+static ViewMediaTrack* view_media_engine_create_audio_track (ViewMediaEngine* self, ModelTrack* track, GError** error) {
+#line 4867 "MediaEngine.c"
+       ViewMediaTrack* result = NULL;
+       GError * _inner_error_;
+       ModelTrack* _tmp0_;
+       ModelAudioTrack* model_track;
+       ViewMediaAudioTrack* audio_track;
+#line 1169 "MediaEngine.vala"
+       g_return_val_if_fail (VIEW_IS_MEDIA_ENGINE (self), NULL);
+#line 1169 "MediaEngine.vala"
+       g_return_val_if_fail (MODEL_IS_TRACK (track), NULL);
+#line 4877 "MediaEngine.c"
+       _inner_error_ = NULL;
+#line 1170 "MediaEngine.vala"
+       model_track = _g_object_ref0 ((_tmp0_ = track, MODEL_IS_AUDIO_TRACK (_tmp0_) ? ((ModelAudioTrack*) _tmp0_) : NULL));
+#line 1171 "MediaEngine.vala"
+       audio_track = NULL;
+#line 1172 "MediaEngine.vala"
+       if (model_track != NULL) {
+#line 4885 "MediaEngine.c"
+               ViewMediaAudioTrack* _tmp1_;
+               ViewMediaAudioTrack* _tmp2_;
+#line 1173 "MediaEngine.vala"
+               _tmp1_ = view_media_audio_track_new (self, model_track, &_inner_error_);
+#line 4890 "MediaEngine.c"
+               if (_inner_error_ != NULL) {
+                       g_propagate_error (error, _inner_error_);
+                       _g_object_unref0 (model_track);
+                       _g_object_unref0 (audio_track);
+                       return NULL;
+               }
+#line 1173 "MediaEngine.vala"
+               audio_track = (_tmp2_ = _tmp1_, _g_object_unref0 (audio_track), _tmp2_);
+#line 4899 "MediaEngine.c"
+       } else {
+#line 1175 "MediaEngine.vala"
+               g_assert (FALSE);
+#line 4903 "MediaEngine.c"
+       }
+       result = VIEW_MEDIA_TRACK (audio_track);
+       _g_object_unref0 (model_track);
+#line 1177 "MediaEngine.vala"
+       return result;
+#line 4909 "MediaEngine.c"
+}
+
+
+#line 1180 "MediaEngine.vala"
+static void view_media_engine_on_track_removed (ViewMediaEngine* self, ViewMediaTrack* track) {
+#line 1180 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1180 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_TRACK (track));
+#line 1181 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_track_removed");
+#line 1182 "MediaEngine.vala"
+       gee_abstract_collection_remove (GEE_ABSTRACT_COLLECTION (self->priv->tracks), track);
+#line 4923 "MediaEngine.c"
+}
+
+
+#line 1185 "MediaEngine.vala"
+static void view_media_engine_on_error_occurred (ViewMediaEngine* self, const char* major_message, const char* minor_message) {
+#line 1185 "MediaEngine.vala"
+       g_return_if_fail (VIEW_IS_MEDIA_ENGINE (self));
+#line 1185 "MediaEngine.vala"
+       g_return_if_fail (major_message != NULL);
+#line 1186 "MediaEngine.vala"
+       logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_error_occurred");
+#line 1187 "MediaEngine.vala"
+       g_signal_emit_by_name (self, "error-occurred", major_message, minor_message);
+#line 4937 "MediaEngine.c"
+}
+
+
+static void view_media_engine_class_init (ViewMediaEngineClass * klass) {
+       view_media_engine_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewMediaEnginePrivate));
+       VIEW_MEDIA_ENGINE_CLASS (klass)->do_null_state_export = view_media_engine_real_do_null_state_export;
+       VIEW_MEDIA_ENGINE_CLASS (klass)->pause = view_media_engine_real_pause;
+       G_OBJECT_CLASS (klass)->finalize = view_media_engine_finalize;
+       g_signal_new ("playstate_changed", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("position_changed", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__INT64, G_TYPE_NONE, 1, G_TYPE_INT64);
+       g_signal_new ("pre_export", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__INT64, G_TYPE_NONE, 1, G_TYPE_INT64);
+       g_signal_new ("post_export", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+       g_signal_new ("callback_pulse", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("level_changed", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_DOUBLE_DOUBLE, G_TYPE_NONE, 3, GST_TYPE_OBJECT, G_TYPE_DOUBLE, G_TYPE_DOUBLE);
+       g_signal_new ("record_completed", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("link_for_playback", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
+       g_signal_new ("link_for_export", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
+       g_signal_new ("prepare_window", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+       g_signal_new ("error_occurred", VIEW_TYPE_MEDIA_ENGINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__STRING_STRING, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
+}
+
+
+static void view_media_engine_multi_file_progress_interface_interface_init (MultiFileProgressInterfaceIface * iface) {
+       view_media_engine_multi_file_progress_interface_parent_iface = g_type_interface_peek_parent (iface);
+       iface->cancel = view_media_engine_real_cancel;
+       iface->complete = view_media_engine_real_complete;
+}
+
+
+static void view_media_engine_instance_init (ViewMediaEngine * self) {
+       self->priv = VIEW_MEDIA_ENGINE_GET_PRIVATE (self);
+       self->play_state = PLAY_STATE_STOPPED;
+}
+
+
+static void view_media_engine_finalize (GObject* obj) {
+       ViewMediaEngine * self;
+       self = VIEW_MEDIA_ENGINE (obj);
+       _gst_object_unref0 (self->pipeline);
+       _gst_object_unref0 (self->record_bin);
+       _gst_object_unref0 (self->converter);
+       _gst_object_unref0 (self->adder);
+       _g_object_unref0 (self->record_track);
+       _g_object_unref0 (self->record_region);
+       _gst_object_unref0 (self->priv->audio_in);
+       _gst_object_unref0 (self->priv->record_capsfilter);
+       _gst_object_unref0 (self->priv->wav_encoder);
+       _gst_object_unref0 (self->priv->record_sink);
+       _g_object_unref0 (self->priv->tracks);
+       G_OBJECT_CLASS (view_media_engine_parent_class)->finalize (obj);
+}
+
+
+GType view_media_engine_get_type (void) {
+       static volatile gsize view_media_engine_type_id__volatile = 0;
+       if (g_once_init_enter (&view_media_engine_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewMediaEngineClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_media_engine_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewMediaEngine), 0, (GInstanceInitFunc) view_media_engine_instance_init, NULL };
+               static const GInterfaceInfo multi_file_progress_interface_info = { (GInterfaceInitFunc) view_media_engine_multi_file_progress_interface_interface_init, (GInterfaceFinalizeFunc) NULL, NULL};
+               GType view_media_engine_type_id;
+               view_media_engine_type_id = g_type_register_static (G_TYPE_OBJECT, "ViewMediaEngine", &g_define_type_info, 0);
+               g_type_add_interface_static (view_media_engine_type_id, TYPE_MULTI_FILE_PROGRESS_INTERFACE, &multi_file_progress_interface_info);
+               g_once_init_leave (&view_media_engine_type_id__volatile, view_media_engine_type_id);
+       }
+       return view_media_engine_type_id__volatile;
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       if ((array != NULL) && (destroy_func != NULL)) {
+               int i;
+               for (i = 0; i < array_length; i = i + 1) {
+                       if (((gpointer*) array)[i] != NULL) {
+                               destroy_func (((gpointer*) array)[i]);
+                       }
+               }
+       }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       _vala_array_destroy (array, array_length, destroy_func);
+       g_free (array);
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+       if (str1 == NULL) {
+               return -(str1 != str2);
+       }
+       if (str2 == NULL) {
+               return str1 != str2;
+       }
+       return strcmp (str1, str2);
+}
+
+
+
+static void g_cclosure_user_marshal_VOID__STRING_STRING (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+       typedef void (*GMarshalFunc_VOID__STRING_STRING) (gpointer data1, const char* arg_1, const char* arg_2, gpointer data2);
+       register GMarshalFunc_VOID__STRING_STRING callback;
+       register GCClosure * cc;
+       register gpointer data1, data2;
+       cc = (GCClosure *) closure;
+       g_return_if_fail (n_param_values == 3);
+       if (G_CCLOSURE_SWAP_DATA (closure)) {
+               data1 = closure->data;
+               data2 = param_values->data[0].v_pointer;
+       } else {
+               data1 = param_values->data[0].v_pointer;
+               data2 = closure->data;
+       }
+       callback = (GMarshalFunc_VOID__STRING_STRING) (marshal_data ? marshal_data : cc->callback);
+       callback (data1, g_value_get_string (param_values + 1), g_value_get_string (param_values + 2), data2);
+}
+
+
+static void g_cclosure_user_marshal_VOID__DOUBLE_DOUBLE (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+       typedef void (*GMarshalFunc_VOID__DOUBLE_DOUBLE) (gpointer data1, double arg_1, double arg_2, gpointer data2);
+       register GMarshalFunc_VOID__DOUBLE_DOUBLE callback;
+       register GCClosure * cc;
+       register gpointer data1, data2;
+       cc = (GCClosure *) closure;
+       g_return_if_fail (n_param_values == 3);
+       if (G_CCLOSURE_SWAP_DATA (closure)) {
+               data1 = closure->data;
+               data2 = param_values->data[0].v_pointer;
+       } else {
+               data1 = param_values->data[0].v_pointer;
+               data2 = closure->data;
+       }
+       callback = (GMarshalFunc_VOID__DOUBLE_DOUBLE) (marshal_data ? marshal_data : cc->callback);
+       callback (data1, g_value_get_double (param_values + 1), g_value_get_double (param_values + 2), data2);
+}
+
+
+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) {
+       typedef void (*GMarshalFunc_VOID__INT64) (gpointer data1, gint64 arg_1, gpointer data2);
+       register GMarshalFunc_VOID__INT64 callback;
+       register GCClosure * cc;
+       register gpointer data1, data2;
+       cc = (GCClosure *) closure;
+       g_return_if_fail (n_param_values == 2);
+       if (G_CCLOSURE_SWAP_DATA (closure)) {
+               data1 = closure->data;
+               data2 = param_values->data[0].v_pointer;
+       } else {
+               data1 = param_values->data[0].v_pointer;
+               data2 = closure->data;
+       }
+       callback = (GMarshalFunc_VOID__INT64) (marshal_data ? marshal_data : cc->callback);
+       callback (data1, g_value_get_int64 (param_values + 1), data2);
+}
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_DOUBLE_DOUBLE (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+       typedef void (*GMarshalFunc_VOID__OBJECT_DOUBLE_DOUBLE) (gpointer data1, gpointer arg_1, double arg_2, double arg_3, gpointer data2);
+       register GMarshalFunc_VOID__OBJECT_DOUBLE_DOUBLE callback;
+       register GCClosure * cc;
+       register gpointer data1, data2;
+       cc = (GCClosure *) closure;
+       g_return_if_fail (n_param_values == 4);
+       if (G_CCLOSURE_SWAP_DATA (closure)) {
+               data1 = closure->data;
+               data2 = param_values->data[0].v_pointer;
+       } else {
+               data1 = param_values->data[0].v_pointer;
+               data2 = closure->data;
+       }
+       callback = (GMarshalFunc_VOID__OBJECT_DOUBLE_DOUBLE) (marshal_data ? marshal_data : cc->callback);
+       callback (data1, g_value_get_object (param_values + 1), g_value_get_double (param_values + 2), g_value_get_double (param_values + 3), data2);
+}
+
+
+