static gboolean check_container (GstDiscovererInfo *info, GstEncodingProfile *profile) { GstDiscovererStreamInfo *stream_info; GType stream_type; GstCaps *stream_caps; gboolean ret = FALSE; const GstCaps *profile_caps = gst_encoding_profile_get_format (profile); /* Top-level GstStreamInformation in the topology will be * the container */ stream_info = gst_discoverer_info_get_stream_info (info); stream_caps = gst_discoverer_stream_info_get_caps (stream_info); stream_type = G_TYPE_FROM_INSTANCE (stream_info); if (stream_type == GST_TYPE_DISCOVERER_CONTAINER_INFO && gst_caps_can_intersect (stream_caps, profile_caps)) ret = TRUE; else if (stream_type != GST_TYPE_DISCOVERER_CONTAINER_INFO && gst_caps_is_empty (profile_caps)) ret = TRUE; gst_discoverer_stream_info_unref (stream_info); gst_caps_unref (stream_caps); return ret; }
static void print_topology (GstDiscovererStreamInfo * info, gint depth) { GstDiscovererStreamInfo *next; if (!info) return; print_stream_info (info, GINT_TO_POINTER (depth)); next = gst_discoverer_stream_info_get_next (info); if (next) { print_topology (next, depth + 1); gst_discoverer_stream_info_unref (next); } else if (GST_IS_DISCOVERER_CONTAINER_INFO (info)) { GList *tmp, *streams; streams = gst_discoverer_container_info_get_streams (GST_DISCOVERER_CONTAINER_INFO (info)); for (tmp = streams; tmp; tmp = tmp->next) { GstDiscovererStreamInfo *tmpinf = (GstDiscovererStreamInfo *) tmp->data; print_topology (tmpinf, depth + 1); } gst_discoverer_stream_info_list_free (streams); } }
/** * gst_discoverer_stream_info_list_free: * @infos: a #GList of #GstDiscovererStreamInfo * * Decrements the reference count of all contained #GstDiscovererStreamInfo * and fress the #GList. */ void gst_discoverer_stream_info_list_free (GList * infos) { GList *tmp; for (tmp = infos; tmp; tmp = tmp->next) gst_discoverer_stream_info_unref ((GstDiscovererStreamInfo *) tmp->data); g_list_free (infos); }
static void print_info (GstDiscovererInfo * info, GError * err) { GstDiscovererResult result = gst_discoverer_info_get_result (info); GstDiscovererStreamInfo *sinfo; g_print ("Done discovering %s\n", gst_discoverer_info_get_uri (info)); switch (result) { case GST_DISCOVERER_OK: { break; } case GST_DISCOVERER_URI_INVALID: { g_print ("URI is not valid\n"); break; } case GST_DISCOVERER_ERROR: { g_print ("An error was encountered while discovering the file\n"); g_print (" %s\n", err->message); break; } case GST_DISCOVERER_TIMEOUT: { g_print ("Analyzing URI timed out\n"); break; } case GST_DISCOVERER_BUSY: { g_print ("Discoverer was busy\n"); break; } case GST_DISCOVERER_MISSING_PLUGINS: { g_print ("Missing plugins\n"); if (verbose) { gchar *tmp = gst_structure_to_string (gst_discoverer_info_get_misc (info)); g_print (" (%s)\n", tmp); g_free (tmp); } break; } } if ((sinfo = gst_discoverer_info_get_stream_info (info))) { g_print ("\nTopology:\n"); print_topology (sinfo, 1); g_print ("\nProperties:\n"); print_properties (info, 1); gst_discoverer_stream_info_unref (sinfo); } g_print ("\n"); }
static GstEncodingProfile * make_profile_from_info (GstDiscovererInfo * info) { GstEncodingContainerProfile *profile = NULL; GstDiscovererStreamInfo *sinfo = gst_discoverer_info_get_stream_info (info); /* Get the container format */ if (GST_IS_DISCOVERER_CONTAINER_INFO (sinfo)) { GList *tmp, *substreams; profile = gst_encoding_container_profile_new ((gchar *) "concatenate", NULL, gst_discoverer_stream_info_get_caps (sinfo), NULL); substreams = gst_discoverer_container_info_get_streams ((GstDiscovererContainerInfo *) sinfo); /* For each on the formats add stream profiles */ for (tmp = substreams; tmp; tmp = tmp->next) { GstDiscovererStreamInfo *stream = GST_DISCOVERER_STREAM_INFO (tmp->data); GstEncodingProfile *sprof = NULL; if (GST_IS_DISCOVERER_VIDEO_INFO (stream)) { sprof = (GstEncodingProfile *) gst_encoding_video_profile_new (gst_discoverer_stream_info_get_caps (stream), NULL, NULL, 1); } else if (GST_IS_DISCOVERER_AUDIO_INFO (stream)) { sprof = (GstEncodingProfile *) gst_encoding_audio_profile_new (gst_discoverer_stream_info_get_caps (stream), NULL, NULL, 1); } else { GST_WARNING ("Unsupported streams"); } if (sprof) gst_encoding_container_profile_add_profile (profile, sprof); } if (substreams) gst_discoverer_stream_info_list_free (substreams); } else { GST_ERROR ("No container format !!!"); } if (sinfo) gst_discoverer_stream_info_unref (sinfo); return GST_ENCODING_PROFILE (profile); }
void gupnp_dlna_gst_discoverer_stream_info_unref (gpointer stream) { gst_discoverer_stream_info_unref (stream); }
static void print_info (GstDiscovererInfo * info, GError * err) { GstDiscovererResult result; GstDiscovererStreamInfo *sinfo; if (!info) { g_print ("Could not discover URI\n"); g_print (" %s\n", err->message); return; } result = gst_discoverer_info_get_result (info); g_print ("Done discovering %s\n", gst_discoverer_info_get_uri (info)); switch (result) { case GST_DISCOVERER_OK: { break; } case GST_DISCOVERER_URI_INVALID: { g_print ("URI is not valid\n"); break; } case GST_DISCOVERER_ERROR: { g_print ("An error was encountered while discovering the file\n"); g_print (" %s\n", err->message); break; } case GST_DISCOVERER_TIMEOUT: { g_print ("Analyzing URI timed out\n"); break; } case GST_DISCOVERER_BUSY: { g_print ("Discoverer was busy\n"); break; } case GST_DISCOVERER_MISSING_PLUGINS: { g_print ("Missing plugins\n"); if (verbose) { gint i = 0; const gchar **installer_details = gst_discoverer_info_get_missing_elements_installer_details (info); while (installer_details[i]) { g_print (" (%s)\n", installer_details[i]); i++; } } break; } } if ((sinfo = gst_discoverer_info_get_stream_info (info))) { g_print ("\nTopology:\n"); print_topology (sinfo, 1); g_print ("\nProperties:\n"); print_properties (info, 1); gst_discoverer_stream_info_unref (sinfo); } g_print ("\n"); }
/* This function is called every time the discoverer has information regarding * one of the URIs we provided.*/ void on_discovered_cb (GstDiscoverer *discoverer, GstDiscovererInfo *info, GError *err, CustomData *data) { GstDiscovererResult result; const gchar *uri; const GstTagList *tags; GstDiscovererStreamInfo *sinfo; uri = gst_discoverer_info_get_uri (info); result = gst_discoverer_info_get_result (info); switch (result) { case GST_DISCOVERER_URI_INVALID: g_print ("Invalid URI '%s'\n", uri); break; case GST_DISCOVERER_ERROR: g_print ("Discoverer error: %s\n", err->message); break; case GST_DISCOVERER_TIMEOUT: g_print ("Timeout\n"); break; case GST_DISCOVERER_BUSY: g_print ("Busy\n"); break; case GST_DISCOVERER_MISSING_PLUGINS:{ const GstStructure *s; gchar *str; s = gst_discoverer_info_get_misc (info); str = gst_structure_to_string (s); g_print ("Missing plugins: %s\n", str); g_free (str); break; } case GST_DISCOVERER_OK: g_print ("Discovered '%s'\n", uri); break; } if (result != GST_DISCOVERER_OK) { g_printerr ("This URI cannot be played\n"); //return; } /* If we got no error, show the retrieved information */ g_print ("\nDuration: %" GST_TIME_FORMAT "\n", GST_TIME_ARGS (gst_discoverer_info_get_duration (info))); tags = gst_discoverer_info_get_tags (info); if (tags) { g_print ("Tags:\n"); gst_tag_list_foreach (tags, print_tag_foreach, GINT_TO_POINTER (1)); } g_print ("Seekable: %s\n", (gst_discoverer_info_get_seekable (info) ? "yes" : "no")); g_print ("\n"); sinfo = gst_discoverer_info_get_stream_info (info); if (!sinfo) return; g_print ("Stream information:\n"); print_topology (sinfo, 1); gst_discoverer_stream_info_unref (sinfo); g_print ("\n"); }