diff options
-rw-r--r-- | docs/libs/gst-plugins-base-libs-sections.txt | 1 | ||||
-rw-r--r-- | gst-libs/gst/pbutils/gstdiscoverer-types.c | 45 | ||||
-rw-r--r-- | gst-libs/gst/pbutils/gstdiscoverer.c | 6 | ||||
-rw-r--r-- | gst-libs/gst/pbutils/gstdiscoverer.h | 1 | ||||
-rw-r--r-- | gst-libs/gst/pbutils/pbutils-private.h | 1 | ||||
-rw-r--r-- | tools/gst-discoverer.c | 13 |
6 files changed, 61 insertions, 6 deletions
diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt index 6d866340b..a7cbf7f42 100644 --- a/docs/libs/gst-plugins-base-libs-sections.txt +++ b/docs/libs/gst-plugins-base-libs-sections.txt @@ -2761,6 +2761,7 @@ gst_discoverer_stream_info_ref gst_discoverer_stream_info_unref gst_discoverer_stream_info_list_free gst_discoverer_stream_info_get_stream_type_nick +gst_discoverer_info_get_missing_elements_installer_details gst_discoverer_info_get_audio_streams gst_discoverer_info_get_container_streams gst_discoverer_info_get_streams diff --git a/gst-libs/gst/pbutils/gstdiscoverer-types.c b/gst-libs/gst/pbutils/gstdiscoverer-types.c index 8763efff7..12905ef47 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer-types.c +++ b/gst-libs/gst/pbutils/gstdiscoverer-types.c @@ -353,7 +353,7 @@ G_DEFINE_TYPE (GstDiscovererInfo, gst_discoverer_info, G_TYPE_OBJECT); static void gst_discoverer_info_init (GstDiscovererInfo * info) { - /* Nothing needs initialization */ + info->missing_elements_details = g_ptr_array_new_with_free_func (g_free); } static void @@ -375,6 +375,8 @@ gst_discoverer_info_finalize (GObject * object) if (info->toc) gst_toc_unref (info->toc); + + g_ptr_array_unref (info->missing_elements_details); } static GstDiscovererInfo * @@ -687,6 +689,9 @@ gst_discoverer_stream_info_get_stream_id (GstDiscovererStreamInfo * info) * gst_discoverer_stream_info_get_misc: * @info: a #GstDiscovererStreamInfo * + * Deprecated: This functions is deprecated since version 1.4, use + * gst_discoverer_stream_get_missing_elements_installer_details + * * Returns: (transfer none): additional information regarding the stream (for * example codec version, profile, etc..). If you wish to use the #GstStructure * after the life-time of @info you will need to copy it. @@ -1010,6 +1015,9 @@ DISCOVERER_INFO_ACCESSOR_CODE (seekable, gboolean, FALSE); * gst_discoverer_info_get_misc: * @info: a #GstDiscovererInfo * + * Deprecated: This functions is deprecated since version 1.4, use + * gst_discoverer_info_get_missing_elements_installer_details + * * Returns: (transfer none): Miscellaneous information stored as a #GstStructure * (for example: information about missing plugins). If you wish to use the * #GstStructure after the life-time of @info, you will need to copy it. @@ -1068,3 +1076,38 @@ DISCOVERER_INFO_ACCESSOR_CODE (toc, const GstToc *, NULL); * * Decrements the reference count of @info. */ + + +/** + * gst_discoverer_info_get_missing_elements_installer_details: + * @info: a #GstDiscovererStreamInfo to retrieve installer detail + * for the missing element + * + * Get the installer details for missing elements + * + * Returns: (transfer full): (array zero-terminated=1): An array of strings + * containing informations about how to install the various missing elements + * for @info to be usable. Free with g_strfreev. + * + * Since: 1.4 + */ +const gchar ** +gst_discoverer_info_get_missing_elements_installer_details (const + GstDiscovererInfo * info) +{ + + if (info->result != GST_DISCOVERER_MISSING_PLUGINS) { + GST_WARNING_OBJECT (info, "Trying to get missing element installed details " + "but result is not 'MISSING_PLUGINS'"); + + return NULL; + } + + if (info->missing_elements_details->pdata[info->missing_elements_details-> + len]) { + GST_DEBUG ("Adding NULL pointer to the end of missing_elements_details"); + g_ptr_array_add (info->missing_elements_details, NULL); + } + + return (const gchar **) info->missing_elements_details->pdata; +} diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c index ab5683dda..337cd3200 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer.c +++ b/gst-libs/gst/pbutils/gstdiscoverer.c @@ -1383,9 +1383,13 @@ handle_message (GstDiscoverer * dc, GstMessage * msg) GST_DEBUG_OBJECT (GST_MESSAGE_SRC (msg), "Setting result to MISSING_PLUGINS"); dc->priv->current_info->result = GST_DISCOVERER_MISSING_PLUGINS; + /* FIXME 2.0 Remove completely the ->misc + * Keep the old behaviour for now. + */ if (dc->priv->current_info->misc) gst_structure_free (dc->priv->current_info->misc); - dc->priv->current_info->misc = gst_structure_copy (structure); + g_ptr_array_add (dc->priv->current_info->missing_elements_details, + gst_missing_plugin_message_get_installer_detail (msg)); } else if (sttype == _STREAM_TOPOLOGY_QUARK) { if (dc->priv->current_topology) gst_structure_free (dc->priv->current_topology); diff --git a/gst-libs/gst/pbutils/gstdiscoverer.h b/gst-libs/gst/pbutils/gstdiscoverer.h index 1df0f505d..26d5ac49a 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer.h +++ b/gst-libs/gst/pbutils/gstdiscoverer.h @@ -204,6 +204,7 @@ gboolean gst_discoverer_info_get_seekable(const GstDiscovererIn const GstStructure* gst_discoverer_info_get_misc(const GstDiscovererInfo* info); const GstTagList* gst_discoverer_info_get_tags(const GstDiscovererInfo* info); const GstToc* gst_discoverer_info_get_toc(const GstDiscovererInfo* info); +const gchar** gst_discoverer_info_get_missing_elements_installer_details(const GstDiscovererInfo* info); GList * gst_discoverer_info_get_streams (GstDiscovererInfo *info, GType streamtype); diff --git a/gst-libs/gst/pbutils/pbutils-private.h b/gst-libs/gst/pbutils/pbutils-private.h index 82fd22c89..74242431e 100644 --- a/gst-libs/gst/pbutils/pbutils-private.h +++ b/gst-libs/gst/pbutils/pbutils-private.h @@ -100,6 +100,7 @@ struct _GstDiscovererInfo { GstTagList *tags; GstToc *toc; gboolean seekable; + GPtrArray *missing_elements_details; gpointer _gst_reserved[GST_PADDING]; }; diff --git a/tools/gst-discoverer.c b/tools/gst-discoverer.c index 678c5e8aa..db351b33f 100644 --- a/tools/gst-discoverer.c +++ b/tools/gst-discoverer.c @@ -409,10 +409,15 @@ print_info (GstDiscovererInfo * info, GError * err) { 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); + 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; } |