]> git.sesse.net Git - vlc/commitdiff
MCE plug-in for screen unblanking on Maemo devices
authorRémi Denis-Courmont <remi@remlab.net>
Fri, 30 Sep 2011 07:13:50 +0000 (10:13 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 1 Oct 2011 07:51:16 +0000 (10:51 +0300)
configure.ac
modules/LIST
modules/misc/Modules.am
modules/misc/inhibit/mce.c [new file with mode: 0644]
po/POTFILES.in

index f703f92804c509d9ee0772d3efb6d540b837fd29..560e1e91e60949d83c31719384098d8e109e519b 100644 (file)
@@ -4008,6 +4008,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
index 22adcb0ac871da51141f55ba4801a6ea8d2398ff..890170c372f19c36724246d536039bd5ff91fb53 100644 (file)
@@ -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
index ead1a8c4f94c23d9b414de1e13f7df73cbad3c99..3b66c8120a6806ced4c83888d989bd53c901a56a 100644 (file)
@@ -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 (file)
index 0000000..f107f92
--- /dev/null
@@ -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);
+}
index aca4ecb80ec5119971a3daed45973fbc3d45b5d4..f2488da3e8342998716e8d379a8fc8031bde6a6c 100644 (file)
@@ -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