1 /* util.c generated by valac, the Vala compiler
2 * generated from util.vala, do not modify */
4 /* Copyright 2009 Yorba Foundation
6 * This software is licensed under the GNU Lesser General Public License
7 * (version 2.1 or later). See the COPYING file in this distribution.
11 #include <glib-object.h>
17 #include <glib/gstdio.h>
22 #define _g_free0(var) (var = (g_free (var), NULL))
24 #define TYPE_FRACTION (fraction_get_type ())
25 typedef struct _Fraction Fraction;
27 #define TYPE_TIME_CODE (time_code_get_type ())
28 typedef struct _TimeCode TimeCode;
29 #define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
30 #define _g_checksum_free0(var) ((var == NULL) ? NULL : (var = (g_checksum_free (var), NULL)))
31 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
32 #define _cairo_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_destroy (var), NULL)))
33 #define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
36 MEDIA_ERROR_MISSING_PLUGIN
38 #define MEDIA_ERROR media_error_quark ()
73 extern gboolean debug_enabled;
74 gboolean debug_enabled = FALSE;
75 extern GdkModifierType GDK_SHIFT_ALT_CONTROL_MASK;
76 GdkModifierType GDK_SHIFT_ALT_CONTROL_MASK = (GDK_SHIFT_MASK | GDK_MOD1_MASK) | GDK_CONTROL_MASK;
78 GQuark media_error_quark (void);
79 float float_abs (float f);
80 gboolean float_within (double f, double epsilon);
82 gint stricmp (const char* str1, const char* str2);
83 char** copy_array (char** source, int source_length1, int* result_length1);
84 void print_debug (const char* text);
85 GType fraction_get_type (void);
86 Fraction* fraction_dup (const Fraction* self);
87 void fraction_free (Fraction* self);
88 void fraction_init (Fraction *self, gint numerator, gint denominator);
89 void fraction_init_from_string (Fraction *self, const char* s);
90 gboolean fraction_equal (Fraction *self, Fraction* f);
91 gint fraction_nearest_int (Fraction *self);
92 char* fraction_to_string (Fraction *self);
93 GType time_code_get_type (void);
94 TimeCode* time_code_dup (const TimeCode* self);
95 void time_code_free (TimeCode* self);
96 void time_code_get_from_length (TimeCode *self, gint64 length);
97 char* time_code_to_string (TimeCode *self);
98 gboolean time_in_range (gint64 time, gint64 center, gint64 delta);
99 char* isolate_filename (const char* path);
100 char* get_file_extension (const char* path);
101 char* append_extension (const char* path, const char* extension);
102 gboolean version_at_least (const char* v, const char* w);
103 gboolean get_file_md5_checksum (const char* filename, char** checksum);
104 void save_file_md5_checksum (const char* filename, const char* checksum);
105 gboolean md5_checksum_on_file (const char* filename, char** checksum);
106 void parse_color (const char* color, GdkColor* result);
107 GtkWidget* get_widget (GtkUIManager* manager, const char* name);
108 #define LINE_WIDTH 1.0
110 #define ANTIALIAS CAIRO_ANTIALIAS_DEFAULT
111 void draw_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height);
112 void draw_right_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height);
113 void draw_left_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height);
114 void draw_square_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x, gint y, gint width, gint height);
115 gboolean is_drop_frame_rate (Fraction* r);
116 gint64 frame_to_time_with_rate (gint frame, Fraction* rate);
117 gint time_to_frame_with_rate (gint64 time, Fraction* rate);
118 void frame_to_time (gint frame, Fraction* rate, TimeCode* result);
119 char* frame_to_string (gint frame, Fraction* rate);
120 void breakup_time (gint64 time, gint* hours, gint* minutes, double* seconds);
121 char* time_to_HHMMSS (gint64 time);
122 char* time_to_string (gint64 time);
123 GstElement* make_element_with_name (const char* element_name, const char* display_name, GError** error);
124 GstElement* make_element (const char* name, GError** error);
125 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
126 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
127 static gint _vala_array_length (gpointer array);
128 static int _vala_strcmp0 (const char * str1, const char * str2);
130 const GtkTargetEntry drag_target_entries[1] = {{"text/uri-list", (guint) 0, (guint) 0}};
133 GQuark media_error_quark (void) {
134 return g_quark_from_static_string ("media_error-quark");
139 float float_abs (float f) {
158 gboolean float_within (double f, double epsilon) {
160 gboolean result = FALSE;
161 result = float_abs ((float) f) < epsilon;
199 gint stricmp (const char* str1, const char* str2) {
205 g_return_val_if_fail (str1 != NULL, 0);
207 g_return_val_if_fail (str2 != NULL, 0);
209 temp_str1 = g_utf8_casefold (str1, (gssize) (-1));
211 temp_str2 = g_utf8_casefold (str2, (gssize) (-1));
213 result = g_utf8_collate (temp_str1, temp_str2);
214 _g_free0 (temp_str1);
215 _g_free0 (temp_str2);
223 char** copy_array (char** source, int source_length1, int* result_length1) {
225 char** result = NULL;
227 gint _destination_size_;
228 gint destination_length1;
232 destination = (_tmp0_ = g_new0 (char*, source_length1 + 1), destination_length1 = source_length1, _destination_size_ = destination_length1, _tmp0_);
237 char** item_collection;
238 int item_collection_length1;
241 item_collection = source;
243 item_collection_length1 = source_length1;
244 for (item_it = 0; item_it < source_length1; item_it = item_it + 1) {
246 item = g_strdup (item_collection[item_it]);
250 destination[i] = (_tmp1_ = g_strdup (item), _g_free0 (destination[i]), _tmp1_);
258 result = (_tmp2_ = destination, *result_length1 = destination_length1, _tmp2_);
262 destination = (_vala_array_free (destination, destination_length1, (GDestroyNotify) g_free), NULL);
267 void print_debug (const char* text) {
269 g_return_if_fail (text != NULL);
271 if (!debug_enabled) {
277 g_debug ("util.vala:54: %s", text);
283 void fraction_init (Fraction *self, gint numerator, gint denominator) {
285 memset (self, 0, sizeof (Fraction));
287 (*self).numerator = numerator;
289 (*self).denominator = denominator;
295 void fraction_init_from_string (Fraction *self, const char* s) {
298 gint _elements_size_;
299 gint elements_length1;
303 g_return_if_fail (s != NULL);
305 memset (self, 0, sizeof (Fraction));
306 elements = (_tmp1_ = _tmp0_ = g_strsplit (s, "/", 0), elements_length1 = _vala_array_length (_tmp0_), _elements_size_ = elements_length1, _tmp1_);
308 if (elements_length1 != 2) {
310 (*self).numerator = 0;
312 (*self).denominator = 0;
316 (*self).numerator = atoi (elements[0]);
318 (*self).denominator = atoi (elements[1]);
321 elements = (_vala_array_free (elements, elements_length1, (GDestroyNotify) g_free), NULL);
326 gboolean fraction_equal (Fraction *self, Fraction* f) {
328 gboolean result = FALSE;
330 if (float_abs (((*self).numerator / ((float) (*self).denominator)) - ((*f).numerator / ((float) (*f).denominator))) <= (1000.0f / 1001.0f)) {
345 gint fraction_nearest_int (Fraction *self) {
348 result = (gint) ((((double) (*self).numerator) / (*self).denominator) + 0.5);
356 char* fraction_to_string (Fraction *self) {
359 result = g_strdup_printf ("%d/%d", (*self).numerator, (*self).denominator);
366 Fraction* fraction_dup (const Fraction* self) {
368 dup = g_new0 (Fraction, 1);
369 memcpy (dup, self, sizeof (Fraction));
374 void fraction_free (Fraction* self) {
379 GType fraction_get_type (void) {
380 static volatile gsize fraction_type_id__volatile = 0;
381 if (g_once_init_enter (&fraction_type_id__volatile)) {
382 GType fraction_type_id;
383 fraction_type_id = g_boxed_type_register_static ("Fraction", (GBoxedCopyFunc) fraction_dup, (GBoxedFreeFunc) fraction_free);
384 g_once_init_leave (&fraction_type_id__volatile, fraction_type_id);
386 return fraction_type_id__volatile;
390 #line 101 "util.vala"
391 void time_code_get_from_length (TimeCode *self, gint64 length) {
392 #line 102 "util.vala"
393 length = length / ((gint64) GST_SECOND);
394 #line 104 "util.vala"
395 (*self).hour = (gint) (length / 3600);
396 #line 105 "util.vala"
397 (*self).minute = (gint) ((length % 3600) / 60);
398 #line 106 "util.vala"
399 (*self).second = (gint) ((length % 3600) % 60);
400 #line 107 "util.vala"
406 #line 110 "util.vala"
407 char* time_code_to_string (TimeCode *self) {
417 #line 111 "util.vala"
419 #line 112 "util.vala"
420 if ((*self).hour != 0) {
424 #line 113 "util.vala"
425 ret = (_tmp1_ = g_strconcat (ret, _tmp0_ = g_strdup_printf ("%.2d:", (*self).hour), NULL), _g_free0 (ret), _tmp1_);
429 #line 115 "util.vala"
430 ret = (_tmp3_ = g_strconcat (ret, _tmp2_ = g_strdup_printf ("%.2d:", (*self).minute), NULL), _g_free0 (ret), _tmp3_);
433 #line 116 "util.vala"
434 ret = (_tmp5_ = g_strconcat (ret, _tmp4_ = g_strdup_printf ("%.2d", (*self).second), NULL), _g_free0 (ret), _tmp5_);
437 #line 118 "util.vala"
438 if ((*self).drop_code) {
441 #line 119 "util.vala"
442 ret = (_tmp6_ = g_strconcat (ret, ";", NULL), _g_free0 (ret), _tmp6_);
446 #line 121 "util.vala"
447 ret = (_tmp7_ = g_strconcat (ret, ":", NULL), _g_free0 (ret), _tmp7_);
450 #line 122 "util.vala"
451 ret = (_tmp9_ = g_strconcat (ret, _tmp8_ = g_strdup_printf ("%.2d", (*self).frame), NULL), _g_free0 (ret), _tmp9_);
455 #line 124 "util.vala"
461 TimeCode* time_code_dup (const TimeCode* self) {
463 dup = g_new0 (TimeCode, 1);
464 memcpy (dup, self, sizeof (TimeCode));
469 void time_code_free (TimeCode* self) {
474 GType time_code_get_type (void) {
475 static volatile gsize time_code_type_id__volatile = 0;
476 if (g_once_init_enter (&time_code_type_id__volatile)) {
477 GType time_code_type_id;
478 time_code_type_id = g_boxed_type_register_static ("TimeCode", (GBoxedCopyFunc) time_code_dup, (GBoxedFreeFunc) time_code_free);
479 g_once_init_leave (&time_code_type_id__volatile, time_code_type_id);
481 return time_code_type_id__volatile;
485 #line 128 "util.vala"
486 gboolean time_in_range (gint64 time, gint64 center, gint64 delta) {
488 gboolean result = FALSE;
490 #line 129 "util.vala"
491 diff = time - center;
493 result = llabs (diff) <= delta;
494 #line 130 "util.vala"
500 #line 133 "util.vala"
501 char* isolate_filename (const char* path) {
509 #line 133 "util.vala"
510 g_return_val_if_fail (path != NULL, NULL);
511 #line 134 "util.vala"
512 str = g_path_get_basename (path);
514 result = (_tmp2_ = g_strdup ((_tmp1_ = _tmp0_ = g_strsplit (str, ".", 0), _tmp1__length1 = _vala_array_length (_tmp0_), _tmp1_)[0]), _tmp1_ = (_vala_array_free (_tmp1_, _tmp1__length1, (GDestroyNotify) g_free), NULL), _tmp2_);
516 #line 135 "util.vala"
523 #line 138 "util.vala"
524 char* get_file_extension (const char* path) {
529 #line 138 "util.vala"
530 g_return_val_if_fail (path != NULL, NULL);
531 #line 139 "util.vala"
532 dot = g_utf8_strrchr (path, (gssize) (-1), (gunichar) '.');
535 #line 140 "util.vala"
537 #line 140 "util.vala"
541 #line 140 "util.vala"
542 _tmp0_ = g_utf8_next_char (dot);
545 result = g_strdup (_tmp0_);
546 #line 140 "util.vala"
552 #line 143 "util.vala"
553 char* append_extension (const char* path, const char* extension) {
560 #line 143 "util.vala"
561 g_return_val_if_fail (path != NULL, NULL);
562 #line 143 "util.vala"
563 g_return_val_if_fail (extension != NULL, NULL);
564 #line 144 "util.vala"
565 if ((_tmp1_ = _vala_strcmp0 (_tmp0_ = get_file_extension (path), extension) == 0, _g_free0 (_tmp0_), _tmp1_)) {
567 result = g_strdup (path);
568 #line 145 "util.vala"
572 result = (_tmp3_ = g_strconcat (_tmp2_ = g_strconcat (path, ".", NULL), extension, NULL), _g_free0 (_tmp2_), _tmp3_);
573 #line 147 "util.vala"
579 #line 152 "util.vala"
580 gboolean version_at_least (const char* v, const char* w) {
582 gboolean result = FALSE;
593 #line 152 "util.vala"
594 g_return_val_if_fail (v != NULL, FALSE);
595 #line 152 "util.vala"
596 g_return_val_if_fail (w != NULL, FALSE);
598 va = (_tmp1_ = _tmp0_ = g_strsplit (v, ".", 0), va_length1 = _vala_array_length (_tmp0_), _va_size_ = va_length1, _tmp1_);
599 wa = (_tmp3_ = _tmp2_ = g_strsplit (w, ".", 0), wa_length1 = _vala_array_length (_tmp2_), _wa_size_ = wa_length1, _tmp3_);
602 #line 155 "util.vala"
607 #line 155 "util.vala"
609 #line 155 "util.vala"
614 #line 155 "util.vala"
616 #line 155 "util.vala"
620 #line 155 "util.vala"
622 #line 155 "util.vala"
623 if (!(i < wa_length1)) {
624 #line 155 "util.vala"
628 #line 156 "util.vala"
629 if (i >= va_length1) {
632 va = (_vala_array_free (va, va_length1, (GDestroyNotify) g_free), NULL);
633 wa = (_vala_array_free (wa, wa_length1, (GDestroyNotify) g_free), NULL);
634 #line 157 "util.vala"
638 #line 158 "util.vala"
640 #line 159 "util.vala"
642 #line 160 "util.vala"
646 va = (_vala_array_free (va, va_length1, (GDestroyNotify) g_free), NULL);
647 wa = (_vala_array_free (wa, wa_length1, (GDestroyNotify) g_free), NULL);
648 #line 161 "util.vala"
652 #line 162 "util.vala"
656 va = (_vala_array_free (va, va_length1, (GDestroyNotify) g_free), NULL);
657 wa = (_vala_array_free (wa, wa_length1, (GDestroyNotify) g_free), NULL);
658 #line 163 "util.vala"
666 va = (_vala_array_free (va, va_length1, (GDestroyNotify) g_free), NULL);
667 wa = (_vala_array_free (wa, wa_length1, (GDestroyNotify) g_free), NULL);
668 #line 165 "util.vala"
674 #line 168 "util.vala"
675 gboolean get_file_md5_checksum (const char* filename, char** checksum) {
677 gboolean result = FALSE;
678 GError * _inner_error_;
680 gsize buffer_length = 0UL;
681 #line 168 "util.vala"
682 g_return_val_if_fail (filename != NULL, FALSE);
684 if (checksum != NULL) {
687 _inner_error_ = NULL;
688 #line 169 "util.vala"
689 new_filename = append_extension (filename, "md5");
694 #line 173 "util.vala"
695 g_file_get_contents (new_filename, &_tmp0_, &buffer_length, &_inner_error_);
696 #line 173 "util.vala"
697 *checksum = (_tmp1_ = _tmp0_, _g_free0 (*checksum), _tmp1_);
699 if (_inner_error_ != NULL) {
700 if (_inner_error_->domain == G_FILE_ERROR) {
701 goto __catch2_g_file_error;
703 _g_free0 (new_filename);
704 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
705 g_clear_error (&_inner_error_);
710 __catch2_g_file_error:
714 _inner_error_ = NULL;
718 _g_free0 (new_filename);
719 #line 175 "util.vala"
725 if (_inner_error_ != NULL) {
726 _g_free0 (new_filename);
727 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);
728 g_clear_error (&_inner_error_);
731 result = buffer_length == 32;
732 _g_free0 (new_filename);
733 #line 178 "util.vala"
739 #line 181 "util.vala"
740 void save_file_md5_checksum (const char* filename, const char* checksum) {
742 GError * _inner_error_;
744 #line 181 "util.vala"
745 g_return_if_fail (filename != NULL);
746 #line 181 "util.vala"
747 g_return_if_fail (checksum != NULL);
749 _inner_error_ = NULL;
750 #line 182 "util.vala"
751 new_filename = append_extension (filename, "md5");
754 #line 185 "util.vala"
755 g_file_set_contents (new_filename, checksum, -1, &_inner_error_);
757 if (_inner_error_ != NULL) {
758 if (_inner_error_->domain == G_FILE_ERROR) {
759 goto __catch3_g_file_error;
761 _g_free0 (new_filename);
762 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
763 g_clear_error (&_inner_error_);
768 __catch3_g_file_error:
772 _inner_error_ = NULL;
774 #line 187 "util.vala"
775 g_error ("util.vala:187: Cannot save md5 file %s!\n", new_filename);
781 if (_inner_error_ != NULL) {
782 _g_free0 (new_filename);
783 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);
784 g_clear_error (&_inner_error_);
787 _g_free0 (new_filename);
791 #line 191 "util.vala"
792 gboolean md5_checksum_on_file (const char* filename, char** checksum) {
794 gboolean result = FALSE;
795 GError * _inner_error_;
800 #line 191 "util.vala"
801 g_return_val_if_fail (filename != NULL, FALSE);
803 if (checksum != NULL) {
806 _inner_error_ = NULL;
811 #line 196 "util.vala"
812 g_file_get_contents (filename, &_tmp0_, &len, &_inner_error_);
813 #line 196 "util.vala"
814 file_buffer = (_tmp1_ = _tmp0_, _g_free0 (file_buffer), _tmp1_);
816 if (_inner_error_ != NULL) {
817 if (_inner_error_->domain == G_FILE_ERROR) {
818 goto __catch4_g_file_error;
820 _g_free0 (file_buffer);
821 g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
822 g_clear_error (&_inner_error_);
827 __catch4_g_file_error:
831 _inner_error_ = NULL;
835 _g_free0 (file_buffer);
836 #line 198 "util.vala"
842 if (_inner_error_ != NULL) {
843 _g_free0 (file_buffer);
844 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);
845 g_clear_error (&_inner_error_);
848 #line 201 "util.vala"
849 c = g_checksum_new (G_CHECKSUM_MD5);
850 #line 202 "util.vala"
851 g_checksum_update (c, (guchar*) file_buffer, len);
852 #line 203 "util.vala"
853 *checksum = (_tmp2_ = g_strdup (g_checksum_get_string (c)), _g_free0 (*checksum), _tmp2_);
856 _g_free0 (file_buffer);
857 _g_checksum_free0 (c);
858 #line 204 "util.vala"
864 #line 239 "util.vala"
865 void parse_color (const char* color, GdkColor* result) {
868 #line 239 "util.vala"
869 g_return_if_fail (color != NULL);
870 #line 241 "util.vala"
871 if (!gdk_color_parse (color, &c)) {
872 #line 242 "util.vala"
873 g_error ("util.vala:242: can't parse color");
877 #line 243 "util.vala"
883 static gpointer _g_object_ref0 (gpointer self) {
884 return self ? g_object_ref (self) : NULL;
888 #line 246 "util.vala"
889 GtkWidget* get_widget (GtkUIManager* manager, const char* name) {
891 GtkWidget* result = NULL;
893 #line 246 "util.vala"
894 g_return_val_if_fail (GTK_IS_UI_MANAGER (manager), NULL);
895 #line 246 "util.vala"
896 g_return_val_if_fail (name != NULL, NULL);
897 #line 247 "util.vala"
898 widget = _g_object_ref0 (gtk_ui_manager_get_widget (manager, name));
899 #line 248 "util.vala"
900 if (widget == NULL) {
901 #line 249 "util.vala"
902 g_error ("util.vala:249: can't find widget");
906 #line 250 "util.vala"
912 #line 262 "util.vala"
913 void draw_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height) {
915 gboolean _tmp0_ = FALSE;
918 cairo_t* cairo_window;
919 #line 262 "util.vala"
920 g_return_if_fail (GDK_IS_WINDOW (window));
921 #line 264 "util.vala"
923 #line 264 "util.vala"
927 #line 264 "util.vala"
928 _tmp0_ = height == 0;
931 #line 264 "util.vala"
933 #line 265 "util.vala"
937 #line 267 "util.vala"
938 x1 = (double) (x0 + width);
939 #line 268 "util.vala"
940 y1 = (double) (y0 + height);
941 #line 270 "util.vala"
942 cairo_window = gdk_cairo_create (GDK_DRAWABLE (window));
943 #line 271 "util.vala"
944 gdk_cairo_set_source_color (cairo_window, color);
945 #line 272 "util.vala"
946 cairo_set_antialias (cairo_window, ANTIALIAS);
947 #line 274 "util.vala"
948 if ((width / 2) < RADIUS) {
949 #line 275 "util.vala"
950 if ((height / 2) < RADIUS) {
951 #line 276 "util.vala"
952 cairo_move_to (cairo_window, (double) x0, (y0 + y1) / 2);
953 #line 277 "util.vala"
954 cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, (x0 + x1) / 2, (double) y0);
955 #line 278 "util.vala"
956 cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, (y0 + y1) / 2);
957 #line 279 "util.vala"
958 cairo_curve_to (cairo_window, x1, y1, x1, y1, (x1 + x0) / 2, y1);
959 #line 280 "util.vala"
960 cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, (y0 + y1) / 2);
963 #line 282 "util.vala"
964 cairo_move_to (cairo_window, (double) x0, y0 + RADIUS);
965 #line 283 "util.vala"
966 cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, (x0 + x1) / 2, (double) y0);
967 #line 284 "util.vala"
968 cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, y0 + RADIUS);
969 #line 285 "util.vala"
970 cairo_line_to (cairo_window, x1, y1 - RADIUS);
971 #line 286 "util.vala"
972 cairo_curve_to (cairo_window, x1, y1, x1, y1, (x1 + x0) / 2, y1);
973 #line 287 "util.vala"
974 cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, y1 - RADIUS);
978 #line 290 "util.vala"
979 if ((height / 2) < RADIUS) {
980 #line 291 "util.vala"
981 cairo_move_to (cairo_window, (double) x0, (y0 + y1) / 2);
982 #line 292 "util.vala"
983 cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, x0 + RADIUS, (double) y0);
984 #line 293 "util.vala"
985 cairo_line_to (cairo_window, x1 - RADIUS, (double) y0);
986 #line 294 "util.vala"
987 cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, (y0 + y1) / 2);
988 #line 295 "util.vala"
989 cairo_curve_to (cairo_window, x1, y1, x1, y1, x1 - RADIUS, y1);
990 #line 296 "util.vala"
991 cairo_line_to (cairo_window, x0 + RADIUS, y1);
992 #line 297 "util.vala"
993 cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, (y0 + y1) / 2);
996 #line 299 "util.vala"
997 cairo_move_to (cairo_window, (double) x0, y0 + RADIUS);
998 #line 300 "util.vala"
999 cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, x0 + RADIUS, (double) y0);
1000 #line 301 "util.vala"
1001 cairo_line_to (cairo_window, x1 - RADIUS, (double) y0);
1002 #line 302 "util.vala"
1003 cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, y0 + RADIUS);
1004 #line 303 "util.vala"
1005 cairo_line_to (cairo_window, x1, y1 - RADIUS);
1006 #line 304 "util.vala"
1007 cairo_curve_to (cairo_window, x1, y1, x1, y1, x1 - RADIUS, y1);
1008 #line 305 "util.vala"
1009 cairo_line_to (cairo_window, x0 + RADIUS, y1);
1010 #line 306 "util.vala"
1011 cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, y1 - RADIUS);
1015 #line 309 "util.vala"
1016 cairo_close_path (cairo_window);
1017 #line 311 "util.vala"
1019 #line 312 "util.vala"
1020 cairo_fill (cairo_window);
1023 #line 314 "util.vala"
1024 cairo_set_line_width (cairo_window, LINE_WIDTH);
1025 #line 315 "util.vala"
1026 cairo_stroke (cairo_window);
1029 _cairo_destroy0 (cairo_window);
1033 #line 319 "util.vala"
1034 void draw_right_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height) {
1036 gboolean _tmp0_ = FALSE;
1039 cairo_t* cairo_window;
1040 #line 319 "util.vala"
1041 g_return_if_fail (GDK_IS_WINDOW (window));
1042 #line 321 "util.vala"
1044 #line 321 "util.vala"
1048 #line 321 "util.vala"
1049 _tmp0_ = height == 0;
1052 #line 321 "util.vala"
1054 #line 322 "util.vala"
1058 #line 324 "util.vala"
1059 x1 = (double) (x0 + width);
1060 #line 325 "util.vala"
1061 y1 = (double) (y0 + height);
1062 #line 327 "util.vala"
1063 cairo_window = gdk_cairo_create (GDK_DRAWABLE (window));
1064 #line 328 "util.vala"
1065 gdk_cairo_set_source_color (cairo_window, color);
1066 #line 329 "util.vala"
1067 cairo_set_antialias (cairo_window, ANTIALIAS);
1068 #line 331 "util.vala"
1069 if ((width / 2) < RADIUS) {
1070 #line 332 "util.vala"
1071 if ((height / 2) < RADIUS) {
1072 #line 333 "util.vala"
1073 cairo_move_to (cairo_window, (double) x0, (double) y0);
1074 #line 334 "util.vala"
1075 cairo_line_to (cairo_window, (x0 + x1) / 2, (double) y0);
1076 #line 335 "util.vala"
1077 cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, (y0 + y1) / 2);
1078 #line 336 "util.vala"
1079 cairo_curve_to (cairo_window, x1, y1, x1, y1, (x1 + x0) / 2, y1);
1080 #line 337 "util.vala"
1081 cairo_line_to (cairo_window, (double) x0, y1);
1082 #line 338 "util.vala"
1083 cairo_line_to (cairo_window, (double) x0, (double) y0);
1086 #line 340 "util.vala"
1087 cairo_move_to (cairo_window, (double) x0, (double) y0);
1088 #line 341 "util.vala"
1089 cairo_line_to (cairo_window, (x0 + x1) / 2, (double) y0);
1090 #line 342 "util.vala"
1091 cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, y0 + RADIUS);
1092 #line 343 "util.vala"
1093 cairo_line_to (cairo_window, x1, y1 - RADIUS);
1094 #line 344 "util.vala"
1095 cairo_curve_to (cairo_window, x1, y1, x1, y1, (x1 + x0) / 2, y1);
1096 #line 345 "util.vala"
1097 cairo_line_to (cairo_window, (double) x0, y1);
1098 #line 346 "util.vala"
1099 cairo_line_to (cairo_window, (double) x0, (double) y0);
1103 #line 349 "util.vala"
1104 if ((height / 2) < RADIUS) {
1105 #line 350 "util.vala"
1106 cairo_move_to (cairo_window, (double) x0, (double) y0);
1107 #line 351 "util.vala"
1108 cairo_line_to (cairo_window, x1 - RADIUS, (double) y0);
1109 #line 352 "util.vala"
1110 cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, (y0 + y1) / 2);
1111 #line 353 "util.vala"
1112 cairo_curve_to (cairo_window, x1, y1, x1, y1, x1 - RADIUS, y1);
1113 #line 354 "util.vala"
1114 cairo_line_to (cairo_window, (double) x0, y1);
1115 #line 355 "util.vala"
1116 cairo_line_to (cairo_window, (double) x0, (double) y0);
1119 #line 357 "util.vala"
1120 cairo_move_to (cairo_window, (double) x0, (double) y0);
1121 #line 358 "util.vala"
1122 cairo_line_to (cairo_window, x1 - RADIUS, (double) y0);
1123 #line 359 "util.vala"
1124 cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, y0 + RADIUS);
1125 #line 360 "util.vala"
1126 cairo_line_to (cairo_window, x1, y1 - RADIUS);
1127 #line 361 "util.vala"
1128 cairo_curve_to (cairo_window, x1, y1, x1, y1, x1 - RADIUS, y1);
1129 #line 362 "util.vala"
1130 cairo_line_to (cairo_window, (double) x0, y1);
1131 #line 363 "util.vala"
1132 cairo_line_to (cairo_window, (double) x0, (double) y0);
1136 #line 366 "util.vala"
1137 cairo_close_path (cairo_window);
1138 #line 368 "util.vala"
1140 #line 369 "util.vala"
1141 cairo_fill (cairo_window);
1144 #line 371 "util.vala"
1145 cairo_set_line_width (cairo_window, LINE_WIDTH);
1146 #line 372 "util.vala"
1147 cairo_stroke (cairo_window);
1150 _cairo_destroy0 (cairo_window);
1154 #line 376 "util.vala"
1155 void draw_left_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height) {
1157 gboolean _tmp0_ = FALSE;
1160 cairo_t* cairo_window;
1161 #line 376 "util.vala"
1162 g_return_if_fail (GDK_IS_WINDOW (window));
1163 #line 378 "util.vala"
1165 #line 378 "util.vala"
1169 #line 378 "util.vala"
1170 _tmp0_ = height == 0;
1173 #line 378 "util.vala"
1175 #line 379 "util.vala"
1179 #line 381 "util.vala"
1180 x1 = (double) (x0 + width);
1181 #line 382 "util.vala"
1182 y1 = (double) (y0 + height);
1183 #line 384 "util.vala"
1184 cairo_window = gdk_cairo_create (GDK_DRAWABLE (window));
1185 #line 385 "util.vala"
1186 gdk_cairo_set_source_color (cairo_window, color);
1187 #line 386 "util.vala"
1188 cairo_set_antialias (cairo_window, ANTIALIAS);
1189 #line 388 "util.vala"
1190 if ((width / 2) < RADIUS) {
1191 #line 389 "util.vala"
1192 if ((height / 2) < RADIUS) {
1193 #line 390 "util.vala"
1194 cairo_move_to (cairo_window, (double) x0, (y0 + y1) / 2);
1195 #line 391 "util.vala"
1196 cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, (x0 + x1) / 2, (double) y0);
1197 #line 392 "util.vala"
1198 cairo_line_to (cairo_window, x1, (double) y0);
1199 #line 393 "util.vala"
1200 cairo_line_to (cairo_window, x1, y1);
1201 #line 394 "util.vala"
1202 cairo_line_to (cairo_window, (x1 + x0) / 2, y1);
1203 #line 395 "util.vala"
1204 cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, (y0 + y1) / 2);
1207 #line 397 "util.vala"
1208 cairo_move_to (cairo_window, (double) x0, y0 + RADIUS);
1209 #line 398 "util.vala"
1210 cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, (x0 + x1) / 2, (double) y0);
1211 #line 399 "util.vala"
1212 cairo_line_to (cairo_window, x1, (double) y0);
1213 #line 400 "util.vala"
1214 cairo_line_to (cairo_window, x1, y1);
1215 #line 401 "util.vala"
1216 cairo_line_to (cairo_window, (x1 + x0) / 2, y1);
1217 #line 402 "util.vala"
1218 cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, y1 - RADIUS);
1222 #line 405 "util.vala"
1223 if ((height / 2) < RADIUS) {
1224 #line 406 "util.vala"
1225 cairo_move_to (cairo_window, (double) x0, (y0 + y1) / 2);
1226 #line 407 "util.vala"
1227 cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, x0 + RADIUS, (double) y0);
1228 #line 408 "util.vala"
1229 cairo_line_to (cairo_window, x1, (double) y0);
1230 #line 409 "util.vala"
1231 cairo_line_to (cairo_window, x1, y1);
1232 #line 410 "util.vala"
1233 cairo_line_to (cairo_window, x0 + RADIUS, y1);
1234 #line 411 "util.vala"
1235 cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, (y0 + y1) / 2);
1238 #line 413 "util.vala"
1239 cairo_move_to (cairo_window, (double) x0, y0 + RADIUS);
1240 #line 414 "util.vala"
1241 cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, x0 + RADIUS, (double) y0);
1242 #line 415 "util.vala"
1243 cairo_line_to (cairo_window, x1, (double) y0);
1244 #line 416 "util.vala"
1245 cairo_line_to (cairo_window, x1, y1);
1246 #line 417 "util.vala"
1247 cairo_line_to (cairo_window, x0 + RADIUS, y1);
1248 #line 418 "util.vala"
1249 cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, y1 - RADIUS);
1253 #line 421 "util.vala"
1254 cairo_close_path (cairo_window);
1255 #line 423 "util.vala"
1257 #line 424 "util.vala"
1258 cairo_fill (cairo_window);
1261 #line 426 "util.vala"
1262 cairo_set_line_width (cairo_window, LINE_WIDTH);
1263 #line 427 "util.vala"
1264 cairo_stroke (cairo_window);
1267 _cairo_destroy0 (cairo_window);
1271 #line 431 "util.vala"
1272 void draw_square_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x, gint y, gint width, gint height) {
1274 gboolean _tmp0_ = FALSE;
1275 cairo_t* cairo_window;
1276 #line 431 "util.vala"
1277 g_return_if_fail (GDK_IS_WINDOW (window));
1278 #line 433 "util.vala"
1280 #line 433 "util.vala"
1284 #line 433 "util.vala"
1285 _tmp0_ = height == 0;
1288 #line 433 "util.vala"
1290 #line 434 "util.vala"
1294 #line 436 "util.vala"
1295 cairo_window = gdk_cairo_create (GDK_DRAWABLE (window));
1296 #line 437 "util.vala"
1297 gdk_cairo_set_source_color (cairo_window, color);
1298 #line 438 "util.vala"
1299 cairo_set_antialias (cairo_window, ANTIALIAS);
1300 #line 440 "util.vala"
1301 cairo_rectangle (cairo_window, (double) x, (double) y, (double) width, (double) height);
1302 #line 442 "util.vala"
1304 #line 443 "util.vala"
1305 cairo_fill (cairo_window);
1308 #line 445 "util.vala"
1309 cairo_set_line_width (cairo_window, LINE_WIDTH);
1310 #line 446 "util.vala"
1311 cairo_stroke (cairo_window);
1314 _cairo_destroy0 (cairo_window);
1318 #line 452 "util.vala"
1319 gboolean is_drop_frame_rate (Fraction* r) {
1321 gboolean result = FALSE;
1322 gboolean _tmp0_ = FALSE;
1323 gboolean _tmp1_ = FALSE;
1324 #line 453 "util.vala"
1325 if ((*r).numerator == 2997) {
1326 #line 453 "util.vala"
1327 _tmp1_ = (*r).denominator == 100;
1330 #line 453 "util.vala"
1334 #line 453 "util.vala"
1336 #line 453 "util.vala"
1340 gboolean _tmp2_ = FALSE;
1341 #line 454 "util.vala"
1342 if ((*r).numerator == 30000) {
1343 #line 454 "util.vala"
1344 _tmp2_ = (*r).denominator == 1001;
1347 #line 454 "util.vala"
1351 #line 454 "util.vala"
1356 #line 453 "util.vala"
1362 #line 457 "util.vala"
1363 gint64 frame_to_time_with_rate (gint frame, Fraction* rate) {
1365 gint64 result = 0LL;
1367 #line 458 "util.vala"
1368 time = (gint64) gst_util_uint64_scale ((guint64) frame, (guint64) (GST_SECOND * (*rate).denominator), (guint64) (*rate).numerator);
1371 #line 459 "util.vala"
1377 #line 462 "util.vala"
1378 gint time_to_frame_with_rate (gint64 time, Fraction* rate) {
1383 #line 463 "util.vala"
1384 frame = (gint) gst_util_uint64_scale ((guint64) time, (guint64) (*rate).numerator, (guint64) (GST_SECOND * (*rate).denominator));
1385 #line 469 "util.vala"
1386 if (time >= frame_to_time_with_rate (frame + 1, rate)) {
1387 #line 469 "util.vala"
1391 #line 469 "util.vala"
1396 #line 469 "util.vala"
1402 #line 472 "util.vala"
1403 void frame_to_time (gint frame, Fraction* rate, TimeCode* result) {
1406 TimeCode _tmp0_ = {0};
1409 #line 473 "util.vala"
1411 #line 475 "util.vala"
1413 #line 477 "util.vala"
1414 t.drop_code = FALSE;
1415 #line 478 "util.vala"
1416 if ((*rate).denominator == 1) {
1417 #line 479 "util.vala"
1418 frame_rate = (*rate).numerator;
1421 #line 480 "util.vala"
1422 if (is_drop_frame_rate (rate)) {
1424 gint FRAMES_PER_MINUTE;
1425 gint FRAMES_PER_10_MINUTES;
1427 gint minute_in_block;
1429 #line 481 "util.vala"
1431 #line 482 "util.vala"
1433 #line 485 "util.vala"
1434 FRAMES_PER_MINUTE = (30 * 60) - 2;
1435 #line 486 "util.vala"
1436 FRAMES_PER_10_MINUTES = (10 * FRAMES_PER_MINUTE) + 2;
1437 #line 488 "util.vala"
1438 block = frame / FRAMES_PER_10_MINUTES;
1439 #line 489 "util.vala"
1440 minute_in_block = ((frame % FRAMES_PER_10_MINUTES) - 2) / FRAMES_PER_MINUTE;
1441 #line 490 "util.vala"
1442 minutes = (10 * block) + minute_in_block;
1443 #line 491 "util.vala"
1444 frame = frame + ((2 * minutes) - (2 * block));
1447 #line 495 "util.vala"
1448 frame_rate = (*rate).numerator / (*rate).denominator;
1452 #line 498 "util.vala"
1453 t.frame = frame % frame_rate;
1454 #line 500 "util.vala"
1455 secs = (gint64) (frame / frame_rate);
1456 #line 501 "util.vala"
1457 t.hour = ((gint) secs) / 3600;
1458 #line 502 "util.vala"
1459 t.minute = (((gint) secs) % 3600) / 60;
1460 #line 503 "util.vala"
1461 t.second = (((gint) secs) % 3600) % 60;
1464 #line 505 "util.vala"
1470 #line 508 "util.vala"
1471 char* frame_to_string (gint frame, Fraction* rate) {
1473 char* result = NULL;
1475 TimeCode _tmp0_ = {0};
1476 result = time_code_to_string ((_tmp1_ = (frame_to_time (frame, rate, &_tmp0_), _tmp0_), &_tmp1_));
1477 #line 509 "util.vala"
1483 #line 512 "util.vala"
1484 void breakup_time (gint64 time, gint* hours, gint* minutes, double* seconds) {
1489 #line 513 "util.vala"
1491 #line 514 "util.vala"
1492 minute = (gint64) (GST_SECOND * 60);
1493 #line 515 "util.vala"
1495 #line 516 "util.vala"
1496 *hours = (gint) (the_time / hour);
1497 #line 517 "util.vala"
1498 the_time = the_time % hour;
1499 #line 518 "util.vala"
1500 *minutes = (gint) (the_time / minute);
1501 #line 519 "util.vala"
1502 the_time = the_time % minute;
1503 #line 520 "util.vala"
1504 *seconds = ((double) the_time) / GST_SECOND;
1509 #line 523 "util.vala"
1510 char* time_to_HHMMSS (gint64 time) {
1512 char* result = NULL;
1515 double seconds = 0.0;
1516 #line 528 "util.vala"
1517 breakup_time (time, &hours, &minutes, &seconds);
1519 result = g_strdup_printf ("%02d:%02d:%05.2lf", hours, minutes, seconds);
1520 #line 529 "util.vala"
1526 #line 532 "util.vala"
1527 char* time_to_string (gint64 time) {
1529 char* result = NULL;
1532 double seconds = 0.0;
1534 gboolean _tmp0_ = FALSE;
1535 #line 537 "util.vala"
1536 breakup_time (time, &hours, &minutes, &seconds);
1537 #line 538 "util.vala"
1538 return_value = g_strdup_printf ("%1.2lfs", seconds);
1539 #line 539 "util.vala"
1541 #line 539 "util.vala"
1545 #line 539 "util.vala"
1546 _tmp0_ = minutes > 0;
1549 #line 539 "util.vala"
1554 #line 540 "util.vala"
1555 return_value = (_tmp2_ = g_strconcat (_tmp1_ = g_strdup_printf ("%dm ", minutes), return_value, NULL), _g_free0 (return_value), _tmp2_);
1559 #line 543 "util.vala"
1564 #line 544 "util.vala"
1565 return_value = (_tmp4_ = g_strconcat (_tmp3_ = g_strdup_printf ("%dh ", hours), return_value, NULL), _g_free0 (return_value), _tmp4_);
1569 result = return_value;
1570 #line 547 "util.vala"
1576 #line 550 "util.vala"
1577 GstElement* make_element_with_name (const char* element_name, const char* display_name, GError** error) {
1579 GstElement* result = NULL;
1580 GError * _inner_error_;
1582 #line 550 "util.vala"
1583 g_return_val_if_fail (element_name != NULL, NULL);
1585 _inner_error_ = NULL;
1586 #line 552 "util.vala"
1587 e = gst_element_factory_make (element_name, display_name);
1588 #line 553 "util.vala"
1593 _inner_error_ = (_tmp1_ = g_error_new_literal (MEDIA_ERROR, MEDIA_ERROR_MISSING_PLUGIN, _tmp0_ = g_strdup_printf ("Could not create element %s(%s)", element_name, display_name)), _g_free0 (_tmp0_), _tmp1_);
1595 g_propagate_error (error, _inner_error_);
1596 _gst_object_unref0 (e);
1601 #line 557 "util.vala"
1607 #line 560 "util.vala"
1608 GstElement* make_element (const char* name, GError** error) {
1610 GstElement* result = NULL;
1611 GError * _inner_error_;
1613 #line 560 "util.vala"
1614 g_return_val_if_fail (name != NULL, NULL);
1616 _inner_error_ = NULL;
1617 #line 561 "util.vala"
1618 _tmp0_ = make_element_with_name (name, NULL, &_inner_error_);
1620 if (_inner_error_ != NULL) {
1621 g_propagate_error (error, _inner_error_);
1625 #line 561 "util.vala"
1631 static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
1632 if ((array != NULL) && (destroy_func != NULL)) {
1634 for (i = 0; i < array_length; i = i + 1) {
1635 if (((gpointer*) array)[i] != NULL) {
1636 destroy_func (((gpointer*) array)[i]);
1643 static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
1644 _vala_array_destroy (array, array_length, destroy_func);
1649 static gint _vala_array_length (gpointer array) {
1653 while (((gpointer*) array)[length]) {
1661 static int _vala_strcmp0 (const char * str1, const char * str2) {
1663 return -(str1 != str2);
1666 return str1 != str2;
1668 return strcmp (str1, str2);