static void gth_media_viewer_page_real_view (GthViewerPage *base, GthFileData *file_data) { GthMediaViewerPage *self; char *uri; self = (GthMediaViewerPage*) base; g_return_if_fail (file_data != NULL); if (! gstreamer_init ()) return; gth_viewer_page_focus (GTH_VIEWER_PAGE (self)); if ((self->priv->file_data != NULL) && g_file_equal (file_data->file, self->priv->file_data->file) && (gth_file_data_get_mtime (file_data) == gth_file_data_get_mtime (self->priv->file_data))) { return; } /**/ _g_object_unref (self->priv->file_data); self->priv->file_data = gth_file_data_dup (file_data); self->priv->duration = 0; self->priv->has_audio = FALSE; self->priv->has_video = FALSE; _g_object_unref (self->priv->icon); self->priv->icon = NULL; _gth_media_viewer_page_update_caption (self); /**/ 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")), 0.0); g_signal_handlers_unblock_by_func(GET_WIDGET ("position_adjustment"), position_value_changed_cb, self); reset_player_state (self); create_playbin (self); if (self->priv->playbin == NULL) return; uri = g_file_get_uri (self->priv->file_data->file); _gth_media_viewer_page_set_uri (self, uri, self->priv->visible ? GST_STATE_PLAYING : GST_STATE_PAUSED); g_free (uri); }
static void test_missing_suburisource_handler (void) { GstStructure *s; GstMessage *msg; GstElement *playbin; GError *err = NULL; GstBus *bus; playbin = create_playbin ("file:///does/not/exis.t"); g_object_set (playbin, "suburi", "cookie://withahint.of/cinnamon", NULL); fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_READY), GST_STATE_CHANGE_SUCCESS); fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_PAUSED), GST_STATE_CHANGE_FAILURE); /* there should be at least a missing-plugin message on the bus now and an * error message; the missing-plugin message should be first */ bus = gst_element_get_bus (playbin); msg = gst_bus_poll (bus, GST_MESSAGE_ELEMENT | GST_MESSAGE_ERROR, -1); fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT); fail_unless (msg->structure != NULL); s = msg->structure; fail_unless (gst_structure_has_name (s, "missing-plugin")); fail_unless (gst_structure_has_field_typed (s, "detail", G_TYPE_STRING)); fail_unless_equals_string (gst_structure_get_string (s, "detail"), "cookie"); fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING)); fail_unless_equals_string (gst_structure_get_string (s, "type"), "urisource"); gst_message_unref (msg); msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, -1); fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ERROR); /* make sure the error is a CORE MISSING_PLUGIN one */ gst_message_parse_error (msg, &err, NULL); fail_unless (err != NULL); fail_unless (err->domain == GST_CORE_ERROR, "error has wrong error domain " "%s instead of core-error-quark", g_quark_to_string (err->domain)); fail_unless (err->code == GST_CORE_ERROR_MISSING_PLUGIN, "error has wrong " "code %u instead of GST_CORE_ERROR_MISSING_PLUGIN", err->code); g_error_free (err); gst_message_unref (msg); gst_object_unref (bus); gst_element_set_state (playbin, GST_STATE_NULL); gst_object_unref (playbin); }
static void gth_media_viewer_page_real_show (GthViewerPage *base) { GthMediaViewerPage *self = GTH_MEDIA_VIEWER_PAGE (base); self->priv->visible = TRUE; gth_viewer_page_focus (GTH_VIEWER_PAGE (self)); create_playbin (self); if (self->priv->file_data != NULL) { char *uri; uri = g_file_get_uri (self->priv->file_data->file); _gth_media_viewer_page_set_uri (self, uri, GST_STATE_PLAYING); g_free (uri); } }
static void test_missing_primary_decoder (void) { GstStructure *s; GstMessage *msg; GstElement *playbin; GError *err = NULL; GstBus *bus; gchar *use_decodebin2 = getenv ("USE_DECODEBIN2"); gboolean decodebin2 = use_decodebin2 != NULL && *use_decodebin2 == '1'; fail_unless (gst_element_register (NULL, "codecsrc", GST_RANK_PRIMARY, gst_codec_src_get_type ())); playbin = create_playbin ("codec://"); fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_READY), GST_STATE_CHANGE_SUCCESS); fail_unless_equals_int (gst_element_set_state (playbin, GST_STATE_PAUSED), GST_STATE_CHANGE_ASYNC); /* there should soon be at least a missing-plugin message on the bus and an * error message; the missing-plugin message should be first */ bus = gst_element_get_bus (playbin); msg = gst_bus_poll (bus, GST_MESSAGE_ELEMENT | GST_MESSAGE_ERROR, -1); fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ELEMENT); fail_unless (msg->structure != NULL); s = msg->structure; fail_unless (gst_structure_has_name (s, "missing-plugin")); fail_unless (gst_structure_has_field_typed (s, "type", G_TYPE_STRING)); fail_unless_equals_string (gst_structure_get_string (s, "type"), "decoder"); fail_unless (gst_structure_has_field_typed (s, "detail", GST_TYPE_CAPS)); gst_message_unref (msg); msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, -1); fail_unless_equals_int (GST_MESSAGE_TYPE (msg), GST_MESSAGE_ERROR); /* make sure the error is a STREAM CODEC_NOT_FOUND one */ gst_message_parse_error (msg, &err, NULL); fail_unless (err != NULL); if (decodebin2) { fail_unless (err->domain == GST_CORE_ERROR, "error has wrong error domain " "%s instead of core-error-quark", g_quark_to_string (err->domain)); fail_unless (err->code == GST_CORE_ERROR_MISSING_PLUGIN, "error has wrong " "code %u instead of GST_RESOURCE_ERROR_MISSING_PLUGIN", err->code); } else { fail_unless (err->domain == GST_STREAM_ERROR, "error has wrong error domain " "%s instead of stream-error-quark", g_quark_to_string (err->domain)); fail_unless (err->code == GST_STREAM_ERROR_CODEC_NOT_FOUND, "error has wrong " "code %u instead of GST_STREAM_ERROR_CODEC_NOT_FOUND", err->code); } g_error_free (err); gst_message_unref (msg); gst_object_unref (bus); gst_element_set_state (playbin, GST_STATE_NULL); gst_object_unref (playbin); }