[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