[Libreoffice-commits] core.git: 2 commits - avmedia/source configure.ac include/sal shell/source
Stephan Bergmann
sbergman at redhat.com
Wed May 13 07:45:38 PDT 2015
avmedia/source/gstreamer/gstplayer.cxx | 62 +++++++++
configure.ac | 6
include/sal/log-areas.dox | 1
shell/source/sessioninstall/SyncDbusSessionHelper.cxx | 121 ++++++++++++++----
shell/source/sessioninstall/SyncDbusSessionHelper.hxx | 36 ++---
5 files changed, 181 insertions(+), 45 deletions(-)
New commits:
commit de8afb9a2b461da4c81e45a7e185b553a5f4c3e7
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Wed May 13 16:44:42 2015 +0200
First cut at reporting missing GStreamer plugins
Change-Id: Ia3cd8a2f0979f2312a70b8ee169fe9d6eef85c81
diff --git a/avmedia/source/gstreamer/gstplayer.cxx b/avmedia/source/gstreamer/gstplayer.cxx
index 1b06c17..eea5bb6 100644
--- a/avmedia/source/gstreamer/gstplayer.cxx
+++ b/avmedia/source/gstreamer/gstplayer.cxx
@@ -17,12 +17,17 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <sal/config.h>
+
+#include <cstddef>
+#include <cstring>
+#include <set>
#include <math.h>
#include <cppuhelper/supportsservice.hxx>
#include <rtl/string.hxx>
-
+#include <vcl/svapp.hxx>
#include <vcl/syschild.hxx>
#include <vcl/sysdata.hxx>
@@ -39,6 +44,9 @@
# define AVMEDIA_GST_PLAYER_SERVICENAME "com.sun.star.media.Player_GStreamer"
#endif
+#include <gst/pbutils/missing-plugins.h>
+#include <gst/pbutils/pbutils.h>
+
#if !defined DBG
# if OSL_DEBUG_LEVEL > 2
#ifdef AVMEDIA_GST_0_10
@@ -56,6 +64,56 @@ using namespace ::com::sun::star;
namespace avmedia { namespace gstreamer {
+namespace {
+
+class MissingPluginInstaller {
+public:
+ void report(GstMessage * message);
+
+private:
+ DECL_STATIC_LINK(MissingPluginInstaller, install, rtl_String *);
+
+ std::set<OString> reported_;
+};
+
+void MissingPluginInstaller::report(GstMessage * message) {
+ // assert(gst_is_missing_plugin_message(message));
+ gchar * det = gst_missing_plugin_message_get_installer_detail(message);
+ if (det != nullptr) {
+ std::size_t len = std::strlen(det);
+ if (len <= sal_uInt32(SAL_MAX_INT32)) {
+ OString detStr(det, len);
+ if (reported_.insert(detStr).second) {
+ rtl_string_acquire(detStr.pData);
+ Application::PostUserEvent(
+ LINK(nullptr, MissingPluginInstaller, install),
+ detStr.pData);
+ }
+ } else {
+ SAL_WARN(
+ "avmedia.gstreamer", "detail string too long");
+ }
+ g_free(det);
+ } else {
+ SAL_WARN(
+ "avmedia.gstreamer",
+ "gst_missing_plugin_message_get_installer_detail failed");
+ }
+}
+
+IMPL_STATIC_LINK(MissingPluginInstaller, install, rtl_String *, data) {
+ OString res(data, SAL_NO_ACQUIRE);
+ gst_pb_utils_init(); // not thread safe
+ char * args[]{const_cast<char *>(res.getStr()), nullptr};
+ gst_install_plugins_sync(args, nullptr);
+ return 0;
+}
+
+struct TheMissingPluginInstaller:
+ public rtl::Static<MissingPluginInstaller, TheMissingPluginInstaller>
+{};
+
+}
// - Player -
@@ -328,6 +386,8 @@ GstBusSyncReply Player::processSyncMessage( GstMessage *message )
}
}
#endif
+ } else if (gst_is_missing_plugin_message(message)) {
+ TheMissingPluginInstaller::get().report(message);
} else if( GST_MESSAGE_TYPE( message ) == GST_MESSAGE_ERROR ) {
DBG( "Error !\n" );
if( mnWidth == 0 ) {
diff --git a/configure.ac b/configure.ac
index 5414754..ca530c1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10220,7 +10220,7 @@ if test "$build_gstreamer_1_0" = "yes"; then
if test "$enable_avmedia" = yes -a "$enable_gstreamer_1_0" != no; then
ENABLE_GSTREAMER_1_0="TRUE"
AC_MSG_RESULT([yes])
- PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-video-1.0] )
+ PKG_CHECK_MODULES( [GSTREAMER_1_0], [gstreamer-1.0 gstreamer-plugins-base-1.0 gstreamer-pbutils-1.0 gstreamer-video-1.0] )
GSTREAMER_1_0_CFLAGS=$(printf '%s' "$GSTREAMER_1_0_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
else
AC_MSG_RESULT([no])
@@ -10238,8 +10238,8 @@ if test "$build_gstreamer_0_10" = "yes"; then
if test "$enable_avmedia" = yes -a "$enable_gstreamer_0_10" != no; then
ENABLE_GSTREAMER_0_10="TRUE"
AC_MSG_RESULT([yes])
- PKG_CHECK_MODULES( [GSTREAMER_0_10], [gstreamer-0.10 gstreamer-plugins-base-0.10 gstreamer-interfaces-0.10],, [
- PKG_CHECK_MODULES( [GSTREAMER_0_10], [gstreamer-0.10 gstreamer-plugins-base-0.10] )
+ PKG_CHECK_MODULES( [GSTREAMER_0_10], [gstreamer-0.10 gstreamer-plugins-base-0.10 gstreamer-pbutils-0.10 gstreamer-interfaces-0.10],, [
+ PKG_CHECK_MODULES( [GSTREAMER_0_10], [gstreamer-0.10 gstreamer-plugins-base-0.10 gstreamer-pbutils-0.10] )
])
GSTREAMER_0_10_CFLAGS=$(printf '%s' "$GSTREAMER_0_10_CFLAGS" | sed -e "s/-I/${ISYSTEM?}/g")
else
diff --git a/include/sal/log-areas.dox b/include/sal/log-areas.dox
index 461fb78..d734876 100644
--- a/include/sal/log-areas.dox
+++ b/include/sal/log-areas.dox
@@ -482,6 +482,7 @@ certain functionality.
@section avmedia
@li @c avmedia
+ at li @c avmedia.gstreamer
@li @c avmedia.opengl - OpenGL models
@section other
commit 2527a4d5a7cb1a7086129019a29dc063a3a28f63
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Wed May 13 16:29:38 2015 +0200
Implement some more XModify methods
Change-Id: I1345d6a3d62f1e5c3353c5412024f6b47f824f7a
diff --git a/shell/source/sessioninstall/SyncDbusSessionHelper.cxx b/shell/source/sessioninstall/SyncDbusSessionHelper.cxx
index ae42358..a45c343 100644
--- a/shell/source/sessioninstall/SyncDbusSessionHelper.cxx
+++ b/shell/source/sessioninstall/SyncDbusSessionHelper.cxx
@@ -53,6 +53,32 @@ namespace
throw RuntimeException("couldnt get a proxy!");
return proxy;
}
+
+void request(
+ char const * method, sal_uInt32 xid,
+ css::uno::Sequence<OUString> const & resources,
+ OUString const & interaction)
+{
+ std::vector<OString> resUtf8;
+ std::shared_ptr<GVariantBuilder> builder(
+ g_variant_builder_new(G_VARIANT_TYPE ("as")), GVariantBuilderDeleter());
+ for (auto & i: resources) {
+ auto s(OUStringToOString(i, RTL_TEXTENCODING_UTF8));
+ resUtf8.push_back(s);
+ g_variant_builder_add(builder.get(), "s", s.getStr());
+ }
+ auto iactUtf8(OUStringToOString(interaction, RTL_TEXTENCODING_UTF8));
+ std::shared_ptr<GDBusProxy> proxy(
+ lcl_GetPackageKitProxy("Modify"), GObjectDeleter<GDBusProxy>());
+ GErrorWrapper error(nullptr);
+ g_dbus_proxy_call_sync(
+ proxy.get(), method,
+ g_variant_new(
+ "(uass)", static_cast<guint32>(xid), builder.get(),
+ iactUtf8.getStr()),
+ G_DBUS_CALL_FLAGS_NONE, -1, nullptr, &error.getRef());
+}
+
}
namespace shell { namespace sessioninstall
@@ -63,31 +89,78 @@ namespace shell { namespace sessioninstall
g_type_init ();
#endif
}
- void SAL_CALL SyncDbusSessionHelper::InstallPackageNames( const ::sal_uInt32 nXid, const Sequence< OUString >& vPackages, const OUString& sInteraction ) throw (RuntimeException, std::exception)
- {
- vector< OString > vPackagesOString;
- vPackagesOString.reserve(vPackages.getLength());
- boost::shared_ptr<GVariantBuilder> pBuilder(g_variant_builder_new(G_VARIANT_TYPE ("as")), GVariantBuilderDeleter());
- for( const OUString* pPackage = vPackages.begin(); pPackage != vPackages.end(); ++pPackage)
- {
- vPackagesOString.push_back(OUStringToOString(*pPackage, RTL_TEXTENCODING_ASCII_US));
- g_variant_builder_add(pBuilder.get(), "s", vPackagesOString.back().getStr());
- }
- const OString sInteractionAscii = OUStringToOString(sInteraction, RTL_TEXTENCODING_ASCII_US);
- boost::shared_ptr<GDBusProxy> proxy(lcl_GetPackageKitProxy("Modify"), GObjectDeleter<GDBusProxy>());
- GErrorWrapper error(NULL);
- g_dbus_proxy_call_sync (proxy.get(),
- "InstallPackageNames",
- g_variant_new ("(uass)",
- sal::static_int_cast<guint32>(nXid),
- pBuilder.get(),
- sInteractionAscii.getStr()),
- G_DBUS_CALL_FLAGS_NONE,
- -1, /* timeout */
- NULL, /* cancellable */
- &error.getRef());
- }
+void SyncDbusSessionHelper::InstallPackageFiles(
+ sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
+ OUString const & interaction)
+ throw (css::uno::RuntimeException, std::exception)
+{
+ request("InstallPackageFiles", xid, files, interaction);
+}
+
+void SyncDbusSessionHelper::InstallProvideFiles(
+ sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
+ OUString const & interaction)
+ throw (css::uno::RuntimeException, std::exception)
+{
+ request("InstallProvideFiles", xid, files, interaction);
+}
+
+void SyncDbusSessionHelper::InstallCatalogs(
+ sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
+ OUString const & interaction)
+ throw (css::uno::RuntimeException, std::exception)
+{
+ request("InstallCatalogs", xid, files, interaction);
+}
+
+void SyncDbusSessionHelper::InstallPackageNames(
+ sal_uInt32 xid, css::uno::Sequence<OUString> const & packages,
+ OUString const & interaction)
+ throw (css::uno::RuntimeException, std::exception)
+{
+ request("InstallPackageNames", xid, packages, interaction);
+}
+
+void SyncDbusSessionHelper::InstallMimeTypes(
+ sal_uInt32 xid, css::uno::Sequence<OUString> const & mimeTypes,
+ OUString const & interaction)
+ throw (css::uno::RuntimeException, std::exception)
+{
+ request("InstallMimeTypes", xid, mimeTypes, interaction);
+}
+
+void SyncDbusSessionHelper::InstallFontconfigResources(
+ sal_uInt32 xid, css::uno::Sequence<OUString> const & resources,
+ OUString const & interaction)
+ throw (css::uno::RuntimeException, std::exception)
+{
+ request("InstallFontconfigResources", xid, resources, interaction);
+}
+
+void SyncDbusSessionHelper::InstallGStreamerResources(
+ sal_uInt32 xid, css::uno::Sequence<OUString> const & resources,
+ OUString const & interaction)
+ throw (css::uno::RuntimeException, std::exception)
+{
+ request("InstallGStreamerResources", xid, resources, interaction);
+}
+
+void SyncDbusSessionHelper::RemovePackageByFiles(
+ sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
+ OUString const & interaction)
+ throw (css::uno::RuntimeException, std::exception)
+{
+ request("RemovePackageByFiles", xid, files, interaction);
+}
+
+void SyncDbusSessionHelper::InstallPrinterDrivers(
+ sal_uInt32 xid, css::uno::Sequence<OUString> const & files,
+ OUString const & interaction)
+ throw (css::uno::RuntimeException, std::exception)
+{
+ request("InstallPrinteDrivers", xid, files, interaction);
+}
void SAL_CALL SyncDbusSessionHelper::IsInstalled( const OUString& sPackagename, const OUString& sInteraction, sal_Bool& o_isInstalled ) throw (RuntimeException, std::exception)
{
diff --git a/shell/source/sessioninstall/SyncDbusSessionHelper.hxx b/shell/source/sessioninstall/SyncDbusSessionHelper.hxx
index 2011652..47c72a8 100644
--- a/shell/source/sessioninstall/SyncDbusSessionHelper.hxx
+++ b/shell/source/sessioninstall/SyncDbusSessionHelper.hxx
@@ -22,27 +22,29 @@ namespace shell { namespace sessioninstall
public:
SyncDbusSessionHelper(::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext> const&);
virtual ~SyncDbusSessionHelper() {}
+
// XModify Methods
- virtual void SAL_CALL InstallPackageNames( ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* packages */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+ virtual void SAL_CALL InstallPackageFiles( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< OUString >& files, const OUString& interaction ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual void SAL_CALL InstallProvideFiles( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< OUString >& files, const OUString& interaction ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual void SAL_CALL InstallCatalogs( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< OUString >& files, const OUString& interaction ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual void SAL_CALL InstallPackageNames( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< OUString >& packages, const OUString& interaction ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual void SAL_CALL InstallMimeTypes( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< OUString >& mimeTypes, const OUString& interaction ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual void SAL_CALL InstallFontconfigResources( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< OUString >& resources, const OUString& interaction ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual void SAL_CALL InstallGStreamerResources( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< OUString >& resources, const OUString& interaction ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
- virtual void SAL_CALL InstallPackageFiles( ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* files */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
- { throw ::com::sun::star::uno::RuntimeException(); } // not implemented
- virtual void SAL_CALL InstallProvideFiles( ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* files */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
- { throw ::com::sun::star::uno::RuntimeException(); } // not implemented
- virtual void SAL_CALL InstallCatalogs( ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* files */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
- { throw ::com::sun::star::uno::RuntimeException(); } // not implemented
- virtual void SAL_CALL InstallMimeTypes( ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* mime_types */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
- { throw ::com::sun::star::uno::RuntimeException(); } // not implemented
- virtual void SAL_CALL InstallFontconfigResources( ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* resources */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
- { throw ::com::sun::star::uno::RuntimeException(); } // not implemented
- virtual void SAL_CALL InstallGStreamerResources( ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* resources */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
- { throw ::com::sun::star::uno::RuntimeException(); } // not implemented
virtual void SAL_CALL InstallResources( ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* types */, const ::com::sun::star::uno::Sequence< OUString >& /* resources */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
{ throw ::com::sun::star::uno::RuntimeException(); } // not implemented
- virtual void SAL_CALL RemovePackageByFiles( SAL_UNUSED_PARAMETER ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* files */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
- { throw ::com::sun::star::uno::RuntimeException(); } // not implemented
- virtual void SAL_CALL InstallPrinterDrivers( ::sal_uInt32 /* xid */, const ::com::sun::star::uno::Sequence< OUString >& /* files */, const OUString& /* interaction */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE
- { throw ::com::sun::star::uno::RuntimeException(); } // not implemented
+
+ virtual void SAL_CALL RemovePackageByFiles( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< OUString >& files, const OUString& interaction ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+ virtual void SAL_CALL InstallPrinterDrivers( ::sal_uInt32 xid, const ::com::sun::star::uno::Sequence< OUString >& files, const OUString& interaction ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
// XQuery Methods
virtual void SAL_CALL IsInstalled( const OUString& /* package_name */, const OUString& /* interaction */, sal_Bool& /* installed */ ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
More information about the Libreoffice-commits
mailing list