static void update_current_position_bar (GthMediaViewerPage *self) { GstFormat format; gint64 current_value = 0; format = GST_FORMAT_TIME; if (gst_element_query_position (self->priv->playbin, format, ¤t_value)) { char *s; if (self->priv->duration <= 0) { gst_element_query_duration (self->priv->playbin, format, &self->priv->duration); s = _g_format_duration_for_display (GST_TIME_AS_MSECONDS (self->priv->duration)); gtk_label_set_text (GTK_LABEL (GET_WIDGET ("label_duration")), s); g_free (s); } /* g_print ("==> %" G_GINT64_FORMAT " / %" G_GINT64_FORMAT " (%0.3g)\n" , current_value, self->priv->duration, ((double) current_value / self->priv->duration) * 100.0); */ g_signal_handlers_block_by_func(GET_WIDGET ("position_adjustment"), position_value_changed_cb, self); gtk_adjustment_set_value (GTK_ADJUSTMENT (GET_WIDGET ("position_adjustment")), (self->priv->duration > 0) ? ((double) current_value / self->priv->duration) * 100.0 : 0.0); g_signal_handlers_unblock_by_func(GET_WIDGET ("position_adjustment"), position_value_changed_cb, self); s = _g_format_duration_for_display (GST_TIME_AS_MSECONDS (current_value)); gtk_label_set_text (GTK_LABEL (GET_WIDGET ("label_position")), s); g_free (s); } }
static void position_value_changed_cb (GtkAdjustment *adjustment, gpointer user_data) { GthMediaViewerPage *self = user_data; gint64 current_value; char *s; if (self->priv->playbin == NULL) return; current_value = (gint64) (gtk_adjustment_get_value (adjustment) / 100.0 * self->priv->duration); if (! gst_element_seek_simple (self->priv->playbin, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, current_value)) { g_warning ("seek failed"); } s = _g_format_duration_for_display (GST_TIME_AS_MSECONDS (current_value)); gtk_label_set_text (GTK_LABEL (GET_WIDGET ("label_position")), s); g_free (s); }
static void add_metadata (GFileInfo *info, const char *key, char *raw, char *formatted) { GthMetadata *metadata; if (raw == NULL) return; if (strcmp (key, "general::dimensions") == 0) { g_file_info_set_attribute_string (info, key, raw); return; } else if (strcmp (key, "general::duration") == 0) { int secs; g_free (formatted); sscanf (raw, "%i", &secs); formatted = _g_format_duration_for_display (secs * 1000); } else if (strcmp (key, "audio-video::general::bitrate") == 0) { int bps; g_free (formatted); sscanf (raw, "%i", &bps); formatted = g_strdup_printf ("%d kbps", bps / 1000); } metadata = gth_metadata_new (); g_object_set (metadata, "id", key, "formatted", formatted != NULL ? formatted : raw, "raw", raw, NULL); g_file_info_set_attribute_object (info, key, G_OBJECT (metadata)); g_object_unref (metadata); g_free (raw); g_free (formatted); }