[vlc-commits] MCE plug-in for screen unblanking on Maemo devices
Rémi Denis-Courmont
git at videolan.org
Sat Oct 1 09:51:27 CEST 2011
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Sep 30 10:13:50 2011 +0300| [5befd634322143af617165f64caa16e245cf55c2] | committer: Rémi Denis-Courmont
MCE plug-in for screen unblanking on Maemo devices
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5befd634322143af617165f64caa16e245cf55c2
---
configure.ac | 6 ++
modules/LIST | 1 +
modules/misc/Modules.am | 7 +++
modules/misc/inhibit/mce.c | 126 ++++++++++++++++++++++++++++++++++++++++++++
po/POTFILES.in | 1 +
5 files changed, 141 insertions(+), 0 deletions(-)
diff --git a/configure.ac b/configure.ac
index f703f92..560e1e9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4009,6 +4009,12 @@ AS_IF([test "${have_libgcrypt}" = "yes"], [
dnl
+dnl Nokia MCE plugin (Maemo screen unblanking)
+dnl
+PKG_CHECK_MODULES([MCE], [dbus-1 mce], [VLC_ADD_PLUGIN([mce])], [true])
+
+
+dnl
dnl OSSO (Maemo screen blanking) plugin
dnl
PKG_ENABLE_MODULES_VLC([OSSO_SCREENSAVER], [], [libosso], [Maemo support], [auto])
diff --git a/modules/LIST b/modules/LIST
index 22adcb0..890170c 100644
--- a/modules/LIST
+++ b/modules/LIST
@@ -184,6 +184,7 @@ $Id$
* magnify: zoom video filter
* marq: Overlays a marquee on the video
* mash: OpenMash based decoder
+ * mce: Nokia MCE screen unblanking module
* media_library: a sql based media library
* mediadirs: Picture/Music/Video user directories as service discoveries
* memcpy3dn: 3D Now! accelerated version of memcpy
diff --git a/modules/misc/Modules.am b/modules/misc/Modules.am
index ead1a8c..3b66c81 100644
--- a/modules/misc/Modules.am
+++ b/modules/misc/Modules.am
@@ -28,6 +28,13 @@ libvlc_LTLIBRARIES += \
libxscreensaver_plugin.la
endif
+libmce_plugin_la_SOURCES = inhibit/mce.c
+libmce_plugin_la_CFLAGS = $(AM_CLFAGS) $(DBUS_CFLAGS) $(MCE_CFLAGS)
+libmce_plugin_la_LIBADD = $(AM_LIBADD) $(DBUS_LIBS) $(MCE_LIBS)
+libmce_plugin_la_DEPENDENCIES =
+EXTRA_LTLIBRARIES += libmce_plugin.la
+libvlc_LTLIBRARIES += $(LTLIBmce)
+
SOURCES_osso_screensaver = inhibit/osso.c
libvlc_LTLIBRARIES += \
diff --git a/modules/misc/inhibit/mce.c b/modules/misc/inhibit/mce.c
new file mode 100644
index 0000000..f107f92
--- /dev/null
+++ b/modules/misc/inhibit/mce.c
@@ -0,0 +1,126 @@
+/**
+ * @file mce.c
+ * @brief Nokia MCE screen unblanking for VLC media player
+ */
+/*****************************************************************************
+ * Copyright © 2009-2011 Rémi Denis-Courmont
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1
+ * of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ ****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <vlc_common.h>
+#include <vlc_plugin.h>
+#include <vlc_inhibit.h>
+#include <dbus/dbus.h>
+
+static int Open (vlc_object_t *);
+static void Close (vlc_object_t *);
+
+/*
+ * Module descriptor
+ */
+vlc_module_begin ()
+ set_shortname (N_("MCE"))
+ set_description (N_("Nokia MCE screen unblanking"))
+ set_category (CAT_ADVANCED)
+ set_subcategory (SUBCAT_ADVANCED_MISC)
+ set_capability ("inhibit", 20)
+ set_callbacks (Open, Close)
+vlc_module_end ()
+
+static void Inhibit (vlc_inhibit_t *, bool);
+static void Timer (void *data);
+
+struct vlc_inhibit_sys
+{
+ DBusConnection *conn;
+ vlc_timer_t timer;
+};
+
+static int Open (vlc_object_t *obj)
+{
+ vlc_inhibit_t *ih = (vlc_inhibit_t *)obj;
+ vlc_inhibit_sys_t *sys = malloc (sizeof (*sys));
+ if (unlikely(sys == NULL))
+ return VLC_ENOMEM;
+
+ DBusError err;
+
+ dbus_error_init (&err);
+ sys->conn = dbus_bus_get_private (DBUS_BUS_SYSTEM, &err);
+ if (sys->conn == NULL)
+ {
+ msg_Err (obj, "cannot connect to system bus: %s", err.message);
+ dbus_error_free (&err);
+ goto error;
+ }
+
+ if (vlc_timer_create (&sys->timer, Timer, sys->conn))
+ {
+ dbus_connection_unref (sys->conn);
+ goto error;
+ }
+
+ ih->p_sys = sys;
+ ih->inhibit = Inhibit;
+ return VLC_SUCCESS;
+
+error:
+ free (sys);
+ return VLC_EGENERIC;
+}
+
+static void Close (vlc_object_t *obj)
+{
+ vlc_inhibit_t *ih = (vlc_inhibit_t *)obj;
+ vlc_inhibit_sys_t *sys = ih->p_sys;
+
+ vlc_timer_destroy (sys->timer);
+ dbus_connection_close (sys->conn);
+ dbus_connection_unref (sys->conn);
+ free (sys);
+}
+
+static void Inhibit (vlc_inhibit_t *ih, bool unblank)
+{
+ vlc_inhibit_sys_t *sys = ih->p_sys;
+
+ /* The shortest blanking interval is 10s on N900, 15s on N9 */
+ const mtime_t interval = 9 * CLOCK_FREQ;
+ vlc_timer_schedule (sys->timer, false, unblank, interval);
+}
+
+/* NOTE: This plug-in could be compiled without MCE development files easily.
+ * But then it would get included on all platforms with D-Bus. */
+#include <mce/dbus-names.h>
+
+static void Timer (void *data)
+{
+ DBusConnection *conn = data;
+ DBusMessage *msg = dbus_message_new_method_call (MCE_SERVICE,
+ MCE_REQUEST_PATH,
+ MCE_REQUEST_IF,
+ MCE_DISPLAY_ON_REQ);
+ if (unlikely(msg == NULL))
+ return;
+
+ if (dbus_connection_send (conn, msg, NULL))
+ dbus_connection_flush (conn);
+ dbus_message_unref (msg);
+}
diff --git a/po/POTFILES.in b/po/POTFILES.in
index aca4ecb..f2488da 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -913,6 +913,7 @@ modules/misc/audioscrobbler.c
modules/misc/dhparams.h
modules/misc/gnutls.c
modules/misc/inhibit.c
+modules/misc/inhibit/mce.c
modules/misc/inhibit/osso.c
modules/misc/inhibit/xdg.c
modules/misc/inhibit/xscreensaver.c
More information about the vlc-commits
mailing list