From: <tp...@ke...> - 2007-08-28 14:24:08
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Tue Aug 28 2007 14:24:09 UTC Log message: * docs/libs/gst-plugins-base-libs-sections.txt: * gst-libs/gst/pbutils/missing-plugins.c: * gst-libs/gst/pbutils/missing-plugins.h: * tests/check/libs/pbutils.c: API: add gst_missing_*_installer_detail_new() convenience API so that applications that know exactly what they're missing can request installer detail strings for those items directly instead of having to first create a dummy missing-plugin message and then get the installer detail string from that. Fixes #470456. Modified files: . : ChangeLog docs/libs : gst-plugins-base-libs-sections.txt gst-libs/gst/pbutils: missing-plugins.c missing-plugins.h tests/check/libs: pbutils.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.3473&r2=1.3474 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/docs/libs/gst-plugins-base-libs-sections.txt.diff?r1=1.43&r2=1.44 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/gst-libs/gst/pbutils/missing-plugins.c.diff?r1=1.8&r2=1.9 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/gst-libs/gst/pbutils/missing-plugins.h.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/tests/check/libs/pbutils.c.diff?r1=1.7&r2=1.8 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.3473 retrieving revision 1.3474 diff -u -d -r1.3473 -r1.3474 --- ChangeLog 27 Aug 2007 11:59:55 -0000 1.3473 +++ ChangeLog 28 Aug 2007 14:23:53 -0000 1.3474 @@ -1,3 +1,15 @@ +2007-08-28 Tim-Philipp Müller <tim at centricular dot net> + + * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/pbutils/missing-plugins.c: + * gst-libs/gst/pbutils/missing-plugins.h: + * tests/check/libs/pbutils.c: + API: add gst_missing_*_installer_detail_new() convenience API so + that applications that know exactly what they're missing can request + installer detail strings for those items directly instead of having + to first create a dummy missing-plugin message and then get the + installer detail string from that. Fixes #470456. 2007-08-27 Jan Schmidt <th...@ma...> * gst/playback/gstdecodebin.c: (close_pad_link): Index: gst-plugins-base-libs-sections.txt RCS file: /cvs/gstreamer/gst-plugins-base/docs/libs/gst-plugins-base-libs-sections.txt,v retrieving revision 1.43 retrieving revision 1.44 diff -u -d -r1.43 -r1.44 --- gst-plugins-base-libs-sections.txt 23 Aug 2007 10:58:41 -0000 1.43 +++ gst-plugins-base-libs-sections.txt 28 Aug 2007 14:23:54 -0000 1.44 @@ -1258,6 +1258,12 @@ gst_missing_uri_source_message_new gst_missing_uri_sink_message_new gst_missing_element_message_new +<SUBSECTION> +gst_missing_uri_source_installer_detail_new +gst_missing_uri_sink_installer_detail_new +gst_missing_element_installer_detail_new +gst_missing_decoder_installer_detail_new +gst_missing_encoder_installer_detail_new </SECTION> <SECTION> Index: missing-plugins.c RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/pbutils/missing-plugins.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- missing-plugins.c 26 Aug 2007 14:14:33 -0000 1.8 +++ missing-plugins.c 28 Aug 2007 14:23:54 -0000 1.9 @@ -415,6 +415,7 @@ type = gst_structure_get_string (msg->structure, "type"); g_assert (type != NULL); /* validity already checked above */ + /* FIXME: use gst_installer_detail_new() here too */ str = g_string_new (GST_DETAIL_STRING_MARKER "|"); g_string_append_printf (str, "%u.%u|", GST_VERSION_MAJOR, GST_VERSION_MINOR); @@ -594,3 +595,204 @@ return gst_structure_has_name (msg->structure, "missing-plugin"); } +/* takes ownership of the description */ +static gchar * +gst_installer_detail_new (gchar * description, const gchar * type, + const gchar * detail) +{ + const gchar *progname; + GString *s; + s = g_string_new (GST_DETAIL_STRING_MARKER "|"); + g_string_append_printf (s, "%u.%u|", GST_VERSION_MAJOR, GST_VERSION_MINOR); + progname = (const gchar *) g_get_prgname (); + if (progname) { + g_string_append_printf (s, "%s|", progname); + } else { + g_string_append_printf (s, "pid/%lu|", (gulong) getpid ()); + } + if (description) { + g_strdelimit (description, "|", '#'); + g_string_append_printf (s, "%s|", description); + g_free (description); + g_string_append (s, "|"); + g_string_append_printf (s, "%s-%s", type, detail); + return g_string_free (s, FALSE); +} +/** + * gst_missing_uri_source_installer_detail_new: + * @protocol: the URI protocol the missing source needs to implement, + * e.g. "http" or "mms" + * + * Returns an opaque string containing all the details about the missing + * element to be passed to an external installer called via + * gst_install_plugins_async() or gst_install_plugins_sync(). + * + * This function is mainly for applications that call external plugin + * installation mechanisms using one of the two above-mentioned functions in + * the case where the application knows exactly what kind of plugin it is + * missing. + * Returns: a newly-allocated detail string, or NULL on error. Free string + * with g_free() when not needed any longer. + * Since: 0.10.15 + */ +gchar * +gst_missing_uri_source_installer_detail_new (const gchar * protocol) + gchar *desc; + g_return_val_if_fail (protocol != NULL, NULL); + desc = gst_pb_utils_get_source_description (protocol); + return gst_installer_detail_new (desc, "urisource", protocol); + * gst_missing_uri_sink_installer_detail_new: +gst_missing_uri_sink_installer_detail_new (const gchar * protocol) + desc = gst_pb_utils_get_sink_description (protocol); + return gst_installer_detail_new (desc, "urisink", protocol); + * gst_missing_element_installer_detail_new: + * @factory_name: the name of the missing element (element factory), + * e.g. "videoscale" or "cdparanoiasrc" +gst_missing_element_installer_detail_new (const gchar * factory_name) + g_return_val_if_fail (factory_name != NULL, NULL); + desc = gst_pb_utils_get_element_description (factory_name); + return gst_installer_detail_new (desc, "element", factory_name); + * gst_missing_decoder_installer_detail_new: + * @decode_caps: the (fixed) caps for which a decoder element is needed +gst_missing_decoder_installer_detail_new (const GstCaps * decode_caps) + GstCaps *caps; + gchar *detail_str, *caps_str, *desc; + g_return_val_if_fail (decode_caps != NULL, NULL); + g_return_val_if_fail (GST_IS_CAPS (decode_caps), NULL); + g_return_val_if_fail (!gst_caps_is_any (decode_caps), NULL); + g_return_val_if_fail (!gst_caps_is_empty (decode_caps), NULL); + g_return_val_if_fail (gst_caps_is_fixed (decode_caps), NULL); + desc = gst_pb_utils_get_decoder_description (decode_caps); + caps = copy_and_clean_caps (decode_caps); + caps_str = gst_caps_to_string (caps); + detail_str = gst_installer_detail_new (desc, "decoder", caps_str); + g_free (caps_str); + gst_caps_unref (caps); + return detail_str; + * gst_missing_encoder_installer_detail_new: + * @encode_caps: the (fixed) caps for which an encoder element is needed +gst_missing_encoder_installer_detail_new (const GstCaps * encode_caps) + g_return_val_if_fail (encode_caps != NULL, NULL); + g_return_val_if_fail (GST_IS_CAPS (encode_caps), NULL); + g_return_val_if_fail (!gst_caps_is_any (encode_caps), NULL); + g_return_val_if_fail (!gst_caps_is_empty (encode_caps), NULL); + g_return_val_if_fail (gst_caps_is_fixed (encode_caps), NULL); + desc = gst_pb_utils_get_encoder_description (encode_caps); + caps = copy_and_clean_caps (encode_caps); + detail_str = gst_installer_detail_new (desc, "encoder", caps_str); Index: missing-plugins.h RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/pbutils/missing-plugins.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- missing-plugins.h 4 Mar 2007 23:39:49 -0000 1.2 +++ missing-plugins.h 28 Aug 2007 14:23:54 -0000 1.3 @@ -45,7 +45,7 @@ const GstCaps * encode_caps); /* - * functions for use by the application when dealing with missing-plugin messages + * functions for use by applications when dealing with missing-plugin messages */ gchar * gst_missing_plugin_message_get_installer_detail (GstMessage * msg); @@ -53,7 +53,24 @@ gchar * gst_missing_plugin_message_get_description (GstMessage * msg); gboolean gst_is_missing_plugin_message (GstMessage * msg); - +/* + * functions for use by applications that know exactly what plugins they are + * missing and want to request them directly rather than just react to + * missing-plugin messages posted by elements such as playbin or decodebin +gchar * gst_missing_uri_source_installer_detail_new (const gchar * protocol); +gchar * gst_missing_uri_sink_installer_detail_new (const gchar * protocol); +gchar * gst_missing_element_installer_detail_new (const gchar * factory_name); +gchar * gst_missing_decoder_installer_detail_new (const GstCaps * decode_caps); +gchar * gst_missing_encoder_installer_detail_new (const GstCaps * encode_caps); G_END_DECLS #endif /* __GST_PB_UTILS_MISSING_PLUGINS_H__ */ Index: pbutils.c RCS file: /cvs/gstreamer/gst-plugins-base/tests/check/libs/pbutils.c,v retrieving revision 1.7 diff -u -d -r1.7 -r1.8 --- pbutils.c 4 Mar 2007 23:39:51 -0000 1.7 +++ pbutils.c 28 Aug 2007 14:23:55 -0000 1.8 @@ -72,7 +72,8 @@ bus = gst_element_get_bus (pipeline); /* first, test common assertion failure cases */ - ASSERT_CRITICAL (msg = gst_missing_uri_source_message_new (NULL, "http");); + ASSERT_CRITICAL (msg = gst_missing_uri_source_message_new (NULL, "http"); + ); ASSERT_CRITICAL (gst_missing_uri_source_message_new (pipeline, NULL)); ASSERT_CRITICAL (gst_missing_uri_sink_message_new (NULL, "http")); @@ -540,14 +541,11 @@ ctx = gst_install_plugins_context_new (); - ASSERT_CRITICAL (ret = gst_install_plugins_sync (NULL, ctx); - ); + ASSERT_CRITICAL (ret = gst_install_plugins_sync (NULL, ctx);); ASSERT_CRITICAL (ret = - gst_install_plugins_async (NULL, ctx, result_cb, (gpointer) & marker); + gst_install_plugins_async (NULL, ctx, result_cb, (gpointer) & marker);); - gst_install_plugins_async (details, ctx, NULL, (gpointer) & marker); + gst_install_plugins_async (details, ctx, NULL, (gpointer) & marker);); /* make sure the functions return the right error code if the helper does * not exist */ @@ -591,6 +589,98 @@ GST_END_TEST; +GST_START_TEST (test_pb_utils_installer_details) + GstMessage *msg; + GstElement *el; + gchar *detail1, *detail2; + el = gst_pipeline_new ("dummy-element"); + /* uri source */ + detail1 = gst_missing_uri_source_installer_detail_new ("http"); + fail_unless (detail1 != NULL); + fail_unless (g_str_has_prefix (detail1, "gstreamer|0.10|")); + fail_unless (g_str_has_suffix (detail1, "|urisource-http")); + msg = gst_missing_uri_source_message_new (el, "http"); + fail_unless (msg != NULL); + detail2 = gst_missing_plugin_message_get_installer_detail (msg); + fail_unless (detail2 != NULL); + gst_message_unref (msg); + fail_unless_equals_string (detail1, detail2); + g_free (detail1); + g_free (detail2); + /* uri sink */ + detail1 = gst_missing_uri_sink_installer_detail_new ("http"); + fail_unless (g_str_has_suffix (detail1, "|urisink-http")); + msg = gst_missing_uri_sink_message_new (el, "http"); + /* element */ + detail1 = gst_missing_element_installer_detail_new ("deinterlace"); + fail_unless (g_str_has_suffix (detail1, "|element-deinterlace")); + msg = gst_missing_element_message_new (el, "deinterlace"); + /* decoder */ + caps = gst_caps_new_simple ("audio/x-spiffy", "spiffyversion", G_TYPE_INT, + 2, "channels", G_TYPE_INT, 6, NULL); + detail1 = gst_missing_decoder_installer_detail_new (caps); + fail_unless (g_str_has_suffix (detail1, + "|decoder-audio/x-spiffy, spiffyversion=(int)2")); + msg = gst_missing_decoder_message_new (el, caps); + /* encoder */ + detail1 = gst_missing_encoder_installer_detail_new (caps); + "|encoder-audio/x-spiffy, spiffyversion=(int)2")); + msg = gst_missing_encoder_message_new (el, caps); + gst_object_unref (el); +GST_END_TEST; static Suite * libgstpbutils_suite (void) { @@ -603,6 +693,7 @@ tcase_add_test (tc_chain, test_pb_utils_taglist_add_codec_info); tcase_add_test (tc_chain, test_pb_utils_get_codec_description); tcase_add_test (tc_chain, test_pb_utils_install_plugins); + tcase_add_test (tc_chain, test_pb_utils_installer_details); return s; |
From: <tp...@ke...> - 2007-08-28 14:58:28
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: tpm Date: Tue Aug 28 2007 14:58:32 UTC Log message: * docs/libs/gst-plugins-base-libs-sections.txt: * gst-libs/gst/pbutils/install-plugins.c: * gst-libs/gst/pbutils/install-plugins.h: * tests/check/libs/pbutils.c: API: also add gst_install_plugins_supported() while we're at it (see #470456). Modified files: . : ChangeLog docs/libs : gst-plugins-base-libs-sections.txt gst-libs/gst/pbutils: install-plugins.c install-plugins.h tests/check/libs: pbutils.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.3474&r2=1.3475 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/docs/libs/gst-plugins-base-libs-sections.txt.diff?r1=1.44&r2=1.45 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/gst-libs/gst/pbutils/install-plugins.c.diff?r1=1.6&r2=1.7 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/gst-libs/gst/pbutils/install-plugins.h.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/tests/check/libs/pbutils.c.diff?r1=1.8&r2=1.9 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.3474 retrieving revision 1.3475 diff -u -d -r1.3474 -r1.3475 --- ChangeLog 28 Aug 2007 14:23:53 -0000 1.3474 +++ ChangeLog 28 Aug 2007 14:58:15 -0000 1.3475 @@ -1,6 +1,15 @@ 2007-08-28 Tim-Philipp Müller <tim at centricular dot net> * docs/libs/gst-plugins-base-libs-sections.txt: + * gst-libs/gst/pbutils/install-plugins.c: + * gst-libs/gst/pbutils/install-plugins.h: + * tests/check/libs/pbutils.c: + API: also add gst_install_plugins_supported() while we're at it + (see #470456). + +2007-08-28 Tim-Philipp Müller <tim at centricular dot net> + * docs/libs/gst-plugins-base-libs-sections.txt: * gst-libs/gst/pbutils/missing-plugins.c: * gst-libs/gst/pbutils/missing-plugins.h: * tests/check/libs/pbutils.c: Index: gst-plugins-base-libs-sections.txt RCS file: /cvs/gstreamer/gst-plugins-base/docs/libs/gst-plugins-base-libs-sections.txt,v retrieving revision 1.44 retrieving revision 1.45 diff -u -d -r1.44 -r1.45 --- gst-plugins-base-libs-sections.txt 28 Aug 2007 14:23:54 -0000 1.44 +++ gst-plugins-base-libs-sections.txt 28 Aug 2007 14:58:16 -0000 1.45 @@ -1276,6 +1276,7 @@ gst_install_plugins_sync gst_install_plugins_return_get_name gst_install_plugins_installation_in_progress +gst_install_plugins_supported <SUBSECTION> GstInstallPluginsContext gst_install_plugins_context_new Index: install-plugins.c RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/pbutils/install-plugins.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- install-plugins.c 15 Aug 2007 17:05:45 -0000 1.6 +++ install-plugins.c 28 Aug 2007 14:58:17 -0000 1.7 @@ -722,3 +722,22 @@ { return install_in_progress; } +/** + * gst_install_plugins_supported: + * + * Checks whether plugin installation is likely to be supported by the + * current environment. This currently only checks whether the helper script + * that is to be provided by the distribution or operating system vendor + * exists. + * + * Returns: TRUE if plugin installation is likely to be supported. + * Since: 0.10.15 + */ +gboolean +gst_install_plugins_supported (void) +{ + return g_file_test (gst_install_plugins_get_helper (), + G_FILE_TEST_IS_EXECUTABLE); +} Index: install-plugins.h RCS file: /cvs/gstreamer/gst-plugins-base/gst-libs/gst/pbutils/install-plugins.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- install-plugins.h 4 Mar 2007 23:39:49 -0000 1.2 +++ install-plugins.h 28 Aug 2007 14:58:17 -0000 1.3 @@ -131,6 +131,8 @@ gboolean gst_install_plugins_installation_in_progress (void); +gboolean gst_install_plugins_supported (void); G_END_DECLS #endif /* __GST_PB_UTILS_INSTALL_PLUGINS_H__ */ Index: pbutils.c RCS file: /cvs/gstreamer/gst-plugins-base/tests/check/libs/pbutils.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- pbutils.c 28 Aug 2007 14:23:55 -0000 1.8 +++ pbutils.c 28 Aug 2007 14:58:17 -0000 1.9 @@ -72,8 +72,7 @@ bus = gst_element_get_bus (pipeline); /* first, test common assertion failure cases */ - ASSERT_CRITICAL (msg = gst_missing_uri_source_message_new (NULL, "http"); - ); + ASSERT_CRITICAL (msg = gst_missing_uri_source_message_new (NULL, "http");); ASSERT_CRITICAL (gst_missing_uri_source_message_new (pipeline, NULL)); ASSERT_CRITICAL (gst_missing_uri_sink_message_new (NULL, "http")); @@ -500,9 +499,16 @@ goto done; } + /* test gst_install_plugins_supported() I */ + g_setenv ("GST_INSTALL_PLUGINS_HELPER", "/i/do/not/ex.ist!", 1); + fail_if (gst_install_plugins_supported ()); GST_LOG ("setting GST_INSTALL_PLUGINS_HELPER to '%s'", path); g_setenv ("GST_INSTALL_PLUGINS_HELPER", path, 1); + /* test gst_install_plugins_supported() II */ + fail_unless (gst_install_plugins_supported ()); /* test sync callout */ ret = gst_install_plugins_sync (details, ctx); fail_unless (ret == GST_INSTALL_PLUGINS_HELPER_MISSING || @@ -541,11 +547,14 @@ ctx = gst_install_plugins_context_new (); - ASSERT_CRITICAL (ret = gst_install_plugins_sync (NULL, ctx);); + ASSERT_CRITICAL (ret = gst_install_plugins_sync (NULL, ctx); + ); ASSERT_CRITICAL (ret = - gst_install_plugins_async (NULL, ctx, result_cb, (gpointer) & marker);); + gst_install_plugins_async (NULL, ctx, result_cb, (gpointer) & marker); - gst_install_plugins_async (details, ctx, NULL, (gpointer) & marker);); + gst_install_plugins_async (details, ctx, NULL, (gpointer) & marker); /* make sure the functions return the right error code if the helper does * not exist */ |