From 5befd634322143af617165f64caa16e245cf55c2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Fri, 30 Sep 2011 10:13:50 +0300 Subject: [PATCH] MCE plug-in for screen unblanking on Maemo devices --- 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(+) create mode 100644 modules/misc/inhibit/mce.c diff --git a/configure.ac b/configure.ac index f703f92804..560e1e91e6 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/modules/LIST b/modules/LIST index 22adcb0ac8..890170c372 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 ead1a8c4f9..3b66c8120a 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 0000000000..f107f927b1 --- /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 +#endif + +#include +#include +#include +#include + +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 + +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 aca4ecb80e..f2488da3e8 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 -- 2.39.2