Package updated to version mafw-gst-renderer-0.2.2010.07-2+0m5-1. 0.2.2010.07-2+0m5-1
authorRoman Moravcik <roman.moravcik@gmail.com>
Wed, 5 May 2010 08:12:28 +0000 (10:12 +0200)
committerRoman Moravcik <roman.moravcik@gmail.com>
Wed, 5 May 2010 08:12:28 +0000 (10:12 +0200)
21 files changed:
configure.ac
debian/changelog
debian/control
debian/mafw-gst-subtitles-renderer.dirs [new file with mode: 0644]
debian/mafw-gst-subtitles-renderer.mafw.xsession [new file with mode: 0644]
debian/mafw-gst-subtitles-renderer.postinst
debian/mafw-gst-subtitles-renderer.postrm [deleted file]
debian/mafw-gst-subtitles-renderer.preinst [deleted file]
debian/mafw-gst-subtitles-renderer.prerm
debian/rules
libmafw-gst-renderer/Makefile.am
libmafw-gst-renderer/keypad.c [new file with mode: 0644]
libmafw-gst-renderer/keypad.h [new file with mode: 0644]
libmafw-gst-renderer/mafw-gst-renderer-marshal.c [new file with mode: 0644]
libmafw-gst-renderer/mafw-gst-renderer-marshal.h [new file with mode: 0644]
libmafw-gst-renderer/mafw-gst-renderer-state-paused.c
libmafw-gst-renderer/mafw-gst-renderer-state-transitioning.c
libmafw-gst-renderer/mafw-gst-renderer-worker-volume.c
libmafw-gst-renderer/mafw-gst-renderer-worker.c
libmafw-gst-renderer/mafw-gst-renderer-worker.h
libmafw-gst-renderer/mafw-gst-renderer.c

index 2b40819..a73df69 100644 (file)
@@ -6,7 +6,7 @@
 # Copyright (C) 2007, 2008, 2009 Nokia. All rights reserved.
 
 AC_PREREQ([2.53])
-AC_INIT([mafw-gst-subtitles-renderer], [0.1.2009.47-1])
+AC_INIT([mafw-gst-subtitles-renderer], [0.2.2010.07-2])
 
 AC_CONFIG_SRCDIR([libmafw-gst-renderer/mafw-gst-renderer.h])
 AC_CONFIG_HEADERS([config.h])
@@ -64,6 +64,8 @@ PKG_CHECK_MODULES(DEPS,
                  totem-plparser
                   gconf-2.0 >= 2.0
                  gnome-vfs-2.0
+                 mce
+                 dbus-1
 )
 
 dnl Check for GdkPixbuf, needed for dumping current frame
index 3ccd0af..e2ebb9a 100644 (file)
@@ -1,3 +1,85 @@
+mafw-gst-subtitles-renderer (0.2.2010.07-2+0m5-1) unstable; urgency=low
+
+  * Added Hungarian translation by Gyorgy Lakatos.
+  * Package updated to version mafw-gst-renderer-0.2.2010.07-2+0m5-1.
+
+ -- Roman Moravcik <roman.moravcik@gmail.com>  Mon, 18 Jan 2010 22:39:17 +0100
+
+mafw-gst-renderer (0.2.2010.07-2+0m5) unstable; urgency=low
+
+  * This entry has been added by BIFH queue processor
+    Suffix +0m5 added to package revision
+
+ -- mika tapojarvi <ext-mika.tapojarvi@nokia.com>  Fri, 19 Feb 2010 10:11:34 +0200
+
+mafw-gst-renderer (0.2.2010.07-2) unstable; urgency=low
+
+  * Fixes: NB#156757 - Volume settings can't be changed via Volume key, Media player is playing, Tklock is On.
+
+ -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Wed, 17 Feb 2010 10:09:38 +0200
+
+mafw-gst-renderer (0.2.2010.06-1) unstable; urgency=low
+
+  * Fixes: NB#150064 - NP-Video:Frames not changing while performing seek operation when the video is in paused state
+
+ -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Wed, 10 Feb 2010 21:43:22 +0200
+
+mafw-gst-renderer (0.2.2010.01-1) unstable; urgency=low
+
+  * Version number increased in trunk.
+  * A forbidden word removed from debian/changelog.
+
+ -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Thu, 07 Jan 2010 19:36:53 +0200
+
+mafw-gst-renderer (0.2.2009.52-2) unstable; urgency=low
+
+  * Version number increased.
+
+ -- Tuomas Kamarainen <tuomas.kamarainen@nokia.com>  Wed, 23 Dec 2009 12:40:45 +0200
+
+mafw-gst-renderer (0.2.2009.52-1) unstable; urgency=low
+
+  * Fixes: NB#149945 - mafw-gst-renderer leaks some GStreamer messages
+  * Thanks to Mueller Tim for the patch.
+
+ -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Sun, 20 Dec 2009 22:43:29 +0200
+
+mafw-gst-renderer (0.2.2009.50-2) unstable; urgency=low
+
+  * Fixes: NB#148080 - Device UI becomes very slow after long time usage of Media Player
+
+ -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Thu, 10 Dec 2009 19:07:45 +0200
+
+mafw-gst-renderer (0.2.2009.50-1) unstable; urgency=low
+
+  * Version and changelog updated for pre-release 0.2009.50-1
+
+ -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Tue, 08 Dec 2009 09:21:47 +0200
+
+mafw-gst-renderer (0.2.2009.49-1) unstable; urgency=low
+
+  * Rebuild for 2009.49-1.
+
+ -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Tue, 01 Dec 2009 19:27:31 +0200
+
+mafw-gst-renderer (0.2.2009.48-2) unstable; urgency=low
+
+  * Pre-release PR 1.2 2009.48-2 tag.
+
+ -- Tuomas Kämäräinen <tuomas.kamarainen@nokia.com>  Fri, 27 Nov 2009 11:56:14 +0200
+
+mafw-gst-renderer (0.2.2009.48-1) unstable; urgency=low
+
+  * Pre-release PR 1.2 2009.48-1 tag.
+
+ -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Tue, 24 Nov 2009 21:57:59 +0200
+
+mafw-gst-renderer (0.1.2009.47-2) unstable; urgency=low
+
+  * Version increased.
+
+ -- Tuomas Kamarainen <tuomas.kamarainen@nokia.com>  Fri, 20 Nov 2009 13:26:19 +0300
+
 mafw-gst-subtitles-renderer (0.1.2009.47-1+0m5-5) unstable; urgency=low
 
   * Added Danish translation by Joe Hansen.
@@ -44,25 +126,6 @@ mafw-gst-subtitles-renderer (0.1.2009.47-1+0m5-0) unstable; urgency=low
 
  -- Roman Moravcik <roman.moravcik@gmail.com>  Mon, 18 Jan 2010 22:09:11 +0100
 
-mafw-gst-renderer (0.1.2009.47-1+0m5) unstable; urgency=low
-
-  * This entry has been added by BIFH queue processor
-    Suffix +0m5 added to package revision
-
- -- mika tapojarvi <ext-mika.tapojarvi@nokia.com>  Thu, 26 Nov 2009 11:40:45 +0200
-
-mafw-gst-renderer (0.1.2009.47-1) unstable; urgency=low
-
-  * Fixes: NB#141508 - Specific video file (mjpeg) makes Mediaplayer unusable
-
- -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Fri, 20 Nov 2009 04:18:15 +0200
-
-mafw-gst-renderer (0.1.2009.44-1) unstable; urgency=low
-
-  * Fixes: NB#143299 - mafw_renderer_get_current_metadata don't give correct duration.
-
- -- Mika Tapojärvi <mika.tapojarvi@sse.fi>  Wed, 28 Oct 2009 23:48:22 +0200
-
 mafw-gst-renderer (0.1.2009.42-2) unstable; urgency=low
 
   * Version increased.
index 3623123..5d5095d 100644 (file)
@@ -2,7 +2,7 @@ Source: mafw-gst-subtitles-renderer
 Section: misc
 Priority: optional
 Maintainer: Roman Moravcik <roman.moravcik@gmail.com>
-XSBC-Original-Maintainer: Juha Kellokoski <veitikka6@gmail.com>
+XSBC-Original-Maintainer: Mika Tapojarvi <mika.tapojarvi@sse.fi>
 Build-Depends: debhelper (>= 4.0.0), libglib2.0-dev,
                libgstreamer0.10-dev (>= 0.10.20-0maemo3),
                libgstreamer-plugins-base0.10-dev (>= 0.10.20-0maemo5),
@@ -10,7 +10,8 @@ Build-Depends: debhelper (>= 4.0.0), libglib2.0-dev,
                checkmore, gstreamer0.10-plugins-base,
                gstreamer0.10-plugins-good,
                libhal-dev, libtotem-plparser-dev, libpulse-dev (>= 0.9.15-1),
-               libgconf2-dev, libosso-gnomevfs2-dev, hildon-control-panel-dev
+               libgconf2-dev, libosso-gnomevfs2-dev, mce-dev,
+               libdbus-1-dev, hildon-control-panel-dev
 Standards-Version: 3.7.2
 Homepage: http://mafwsubrenderer.garage.maemo.org/
 Vcs-Browser: https://garage.maemo.org/plugins/ggit/browse.php/?p=mafwsubrenderer
@@ -19,7 +20,7 @@ Vcs-Git: https://vcs.maemo.org/git/mafwsubrenderer
 Package: mafw-gst-subtitles-renderer
 Section: libs
 Architecture: any
-Depends: gconf2, ${shlibs:Depends}, ${misc:Depends}, gstreamer0.10-plugins-base-subtitles (= 0.10.25-0maemo7+0m5)
+Depends: gconf2, ${shlibs:Depends}, ${misc:Depends}, gstreamer0.10-plugins-base-subtitles (= 0.10.25-0maemo14+0m5-1)
 Replaces: mafw-gst-renderer
 Provides: mafw-gst-renderer
 Description: MAFW gst renderer plugin with subtitles support
@@ -38,7 +39,7 @@ Description: debug symbols for mafw-gst-subtitles-renderer
 Package: mafw-gst-subtitles-applet
 Section: user/multimedia
 Architecture: any
-Depends: gconf2, ${shlibs:Depends}, ${misc:Depends}, mafw-gst-subtitles-renderer (= ${binary:Version})
+Depends: gconf2, ${shlibs:Depends}, ${misc:Depends}, mafw-gst-subtitles-renderer
 Description: External subtitles support for Media Player
  Subtitles font and encoding can be change via 'Settings: Subtitles'
  control panel applet.
diff --git a/debian/mafw-gst-subtitles-renderer.dirs b/debian/mafw-gst-subtitles-renderer.dirs
new file mode 100644 (file)
index 0000000..a37ff89
--- /dev/null
@@ -0,0 +1,2 @@
+usr/lib/mafw-plugin
+etc/X11/Xsession.post
\ No newline at end of file
diff --git a/debian/mafw-gst-subtitles-renderer.mafw.xsession b/debian/mafw-gst-subtitles-renderer.mafw.xsession
new file mode 100644 (file)
index 0000000..7bcf082
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+if test -x /usr/sbin/dsmetool; then
+       sudo /usr/bin/mafw.sh start mafw-gst-subtitles-renderer -7
+fi
index 924970d..4cda6c5 100644 (file)
@@ -2,5 +2,5 @@
 
 #DEBHELPER#
 
-test -x /usr/bin/mafw.sh && /usr/bin/mafw.sh start mafw-gst-renderer -7 \
+test -x /usr/bin/mafw.sh && /usr/bin/mafw.sh start mafw-gst-subtitles-renderer -7 \
 || true;
diff --git a/debian/mafw-gst-subtitles-renderer.postrm b/debian/mafw-gst-subtitles-renderer.postrm
deleted file mode 100644 (file)
index e30e40b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-if [ -f /usr/lib/mafw-plugin/mafw-gst-renderer.so.removed ]; then
-       if [ ! -f /usr/lib/mafw-plugin/mafw-gst-renderer.so ]; then
-               # Restore original MAFW GST renderer
-               mv -f /usr/lib/mafw-plugin/mafw-gst-renderer.so.removed /usr/lib/mafw-plugin/mafw-gst-renderer.so
-
-               # Restart MAFW, uninstalation of mafw-gst-subtitles-renderer
-               if [ -x /usr/bin/mafw.sh ]; then
-                       /usr/bin/mafw.sh stop mafw-gst-renderer
-                       sleep 1
-                       /usr/bin/mafw.sh start mafw-gst-renderer
-               fi
-       fi
-fi
diff --git a/debian/mafw-gst-subtitles-renderer.preinst b/debian/mafw-gst-subtitles-renderer.preinst
deleted file mode 100644 (file)
index 50c864d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-if [ ! -f /usr/lib/mafw-plugin/mafw-gst-renderer.so.removed ]; then
-       # Backup original MAFW GST renderer
-       mv -f /usr/lib/mafw-plugin/mafw-gst-renderer.so /usr/lib/mafw-plugin/mafw-gst-renderer.so.removed
-
-       # Stop MAFW, instalation of mafw-gst-subtitles-renderer
-       if [ -x /usr/bin/mafw.sh ]; then
-               /usr/bin/mafw.sh stop mafw-gst-renderer
-               sleep 1
-       fi
-fi
index 084ef87..d64b813 100644 (file)
@@ -2,5 +2,5 @@
 
 #DEBHELPER#
 
-test -x /usr/bin/mafw.sh && /usr/bin/mafw.sh stop mafw-gst-renderer \
+test -x /usr/bin/mafw.sh && /usr/bin/mafw.sh stop mafw-gst-subtitles-renderer \
 || true;
index 75b2eb8..478c03d 100755 (executable)
@@ -71,6 +71,8 @@ binary-arch: build install
        dh_installchangelogs ChangeLog
        dh_installdocs
        dh_install --sourcedir=debian/tmp -v
+       install debian/mafw-gst-subtitles-renderer.mafw.xsession \
+               debian/mafw-gst-subtitles-renderer/etc/X11/Xsession.post/31mafw-gst-subtitles-renderer
        dh_link
        dh_strip --dbg-package=mafw-gst-subtitles-renderer
        dh_compress
@@ -93,4 +95,3 @@ vg:
                
 
 .PHONY: build clean binary-indep binary-arch binary install distcheck vg
-
index a564ab9..3cc2ac5 100644 (file)
@@ -5,39 +5,40 @@
 #
 # Copyright (C) 2007, 2008, 2009 Nokia. All rights reserved.
 
-plugin_LTLIBRARIES             = mafw-gst-renderer.la
+plugin_LTLIBRARIES             = mafw-gst-subtitles-renderer.la
 
 BUILT_SOURCES                  = mafw-gst-renderer-marshal.c \
                                  mafw-gst-renderer-marshal.h
 
-mafw_gst_renderer_la_SOURCES   = $(BUILT_SOURCES) \
-                                 blanking.c blanking.h \
-                                 mafw-gst-renderer.c mafw-gst-renderer.h \
-                                 mafw-gst-renderer-utils.c mafw-gst-renderer-utils.h \
-                                 mafw-gst-renderer-worker.c mafw-gst-renderer-worker.h \
-                                 mafw-gst-renderer-worker-volume.c mafw-gst-renderer-worker-volume.h \
-                                 mafw-gst-renderer-state.c mafw-gst-renderer-state.h \
-                                 mafw-gst-renderer-state-playing.c mafw-gst-renderer-state-playing.h \
-                                 mafw-gst-renderer-state-paused.c mafw-gst-renderer-state-paused.h \
-                                 mafw-gst-renderer-state-stopped.c mafw-gst-renderer-state-stopped.h \
-                                 mafw-gst-renderer-state-transitioning.c mafw-gst-renderer-state-transitioning.h \
-                                 mafw-playlist-iterator.c mafw-playlist-iterator.h
-
-mafw_gst_renderer_la_CPPFLAGS  = $(DEPS_CFLAGS) $(VOLUME_CFLAGS) \
+mafw_gst_subtitles_renderer_la_SOURCES = $(BUILT_SOURCES) \
+                                         keypad.c keypad.h \
+                                         blanking.c blanking.h \
+                                         mafw-gst-renderer.c mafw-gst-renderer.h \
+                                         mafw-gst-renderer-utils.c mafw-gst-renderer-utils.h \
+                                         mafw-gst-renderer-worker.c mafw-gst-renderer-worker.h \
+                                         mafw-gst-renderer-worker-volume.c mafw-gst-renderer-worker-volume.h \
+                                         mafw-gst-renderer-state.c mafw-gst-renderer-state.h \
+                                         mafw-gst-renderer-state-playing.c mafw-gst-renderer-state-playing.h \
+                                         mafw-gst-renderer-state-paused.c mafw-gst-renderer-state-paused.h \
+                                         mafw-gst-renderer-state-stopped.c mafw-gst-renderer-state-stopped.h \
+                                         mafw-gst-renderer-state-transitioning.c mafw-gst-renderer-state-transitioning.h \
+                                         mafw-playlist-iterator.c mafw-playlist-iterator.h
+
+mafw_gst_subtitles_renderer_la_CPPFLAGS        = $(DEPS_CFLAGS) $(VOLUME_CFLAGS) \
                                  -DPREFIX=\"$(prefix)\" $(_CFLAGS)
-mafw_gst_renderer_la_LDFLAGS   = -avoid-version -module $(_LDFLAGS)
-mafw_gst_renderer_la_LIBADD    = $(DEPS_LIBS) $(VOLUME_LIBS) \
+mafw_gst_subtitles_renderer_la_LDFLAGS = -avoid-version -module $(_LDFLAGS)
+mafw_gst_subtitles_renderer_la_LIBADD  = $(DEPS_LIBS) $(VOLUME_LIBS) \
                                  -lgstinterfaces-0.10 -lgstpbutils-0.10
 
 if HAVE_GDKPIXBUF
-mafw_gst_renderer_la_SOURCES += gstscreenshot.c gstscreenshot.h
-mafw_gst_renderer_la_CPPFLAGS += $(GDKPIXBUF_CFLAGS)
-mafw_gst_renderer_la_LIBADD += $(GDKPIXBUF_LIBS)
+mafw_gst_subtitles_renderer_la_SOURCES += gstscreenshot.c gstscreenshot.h
+mafw_gst_subtitles_renderer_la_CPPFLAGS += $(GDKPIXBUF_CFLAGS)
+mafw_gst_subtitles_renderer_la_LIBADD += $(GDKPIXBUF_LIBS)
 endif
 
 if HAVE_CONIC
-mafw_gst_renderer_la_CPPFLAGS += $(CONIC_CFLAGS)
-mafw_gst_renderer_la_LIBADD += $(CONIC_LIBS)
+mafw_gst_subtitles_renderer_la_CPPFLAGS += $(CONIC_CFLAGS)
+mafw_gst_subtitles_renderer_la_LIBADD += $(CONIC_LIBS)
 endif
 
 mafw-gst-renderer-marshal.c: mafw-gst-renderer-marshal.list
diff --git a/libmafw-gst-renderer/keypad.c b/libmafw-gst-renderer/keypad.c
new file mode 100644 (file)
index 0000000..0af13a4
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * This file is a part of MAFW
+ *
+ * Copyright (C) 2007, 2008, 2009 Nokia Corporation, all rights reserved.
+ *
+ * Contact: Visa Smolander <visa.smolander@nokia.com>
+ *
+ * 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; 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
+ * Lesser 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
+ *
+ */
+#include <glib.h>
+#include <mce/dbus-names.h>
+#include <dbus/dbus.h>
+#include "keypad.h"
+
+
+#define KEYPAD_TIMER_INTERVAL 50
+
+static guint toutid;
+
+void keypadlocking_allow(void)
+{
+       if (toutid)
+       {
+               g_source_remove(toutid);
+               toutid = 0;
+       }
+}
+
+static gboolean no_keylock_timeout(gpointer udata)
+{
+       static DBusMessage *msg = NULL;
+       static DBusConnection *sysbus = NULL;
+
+       if (!sysbus)
+       {
+               DBusError err;
+
+               dbus_error_init(&err);
+               sysbus = dbus_bus_get(DBUS_BUS_SYSTEM, &err);
+               g_assert(sysbus);
+               g_assert(!dbus_error_is_set(&err));
+       }
+       if (!msg)
+       {
+               msg = dbus_message_new_method_call(MCE_SERVICE,
+                               MCE_REQUEST_PATH, MCE_REQUEST_IF,
+                               MCE_PREVENT_KEYPAD_OFF_REQ);
+               g_assert(msg);
+       }
+       g_assert(dbus_connection_send(sysbus, msg,NULL));
+       dbus_connection_flush(sysbus);
+       return TRUE;
+}
+
+void keypadlocking_prohibit(void)
+{
+       if (!toutid)
+       {
+               toutid = g_timeout_add_seconds(KEYPAD_TIMER_INTERVAL,
+                                              no_keylock_timeout,
+                                              NULL);
+               no_keylock_timeout(NULL);
+       }
+}
diff --git a/libmafw-gst-renderer/keypad.h b/libmafw-gst-renderer/keypad.h
new file mode 100644 (file)
index 0000000..f434567
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * This file is a part of MAFW
+ *
+ * Copyright (C) 2007, 2008, 2009 Nokia Corporation, all rights reserved.
+ *
+ * Contact: Visa Smolander <visa.smolander@nokia.com>
+ *
+ * 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; 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
+ * Lesser 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
+ *
+ */
+#ifndef KEYPAD_H
+#define KEYPAD_H
+
+G_BEGIN_DECLS
+
+void keypadlocking_prohibit(void);
+void keypadlocking_allow(void);
+
+G_END_DECLS
+
+#endif
diff --git a/libmafw-gst-renderer/mafw-gst-renderer-marshal.c b/libmafw-gst-renderer/mafw-gst-renderer-marshal.c
new file mode 100644 (file)
index 0000000..3682dcb
--- /dev/null
@@ -0,0 +1,91 @@
+#include "mafw-gst-renderer-marshal.h"
+
+#include       <glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v)     g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v)      g_value_get_int (v)
+#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
+#define g_marshal_value_peek_long(v)     g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
+#define g_marshal_value_peek_float(v)    g_value_get_float (v)
+#define g_marshal_value_peek_double(v)   g_value_get_double (v)
+#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v)    g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v)   g_value_get_object (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ *          Do not access GValues directly in your code. Instead, use the
+ *          g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
+#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
+#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
+#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* VOID:BOOLEAN,UINT,INT,STRING (mafw-gst-renderer-marshal.list:2) */
+void
+mafw_gst_renderer_marshal_VOID__BOOLEAN_UINT_INT_STRING (GClosure     *closure,
+                                                         GValue       *return_value G_GNUC_UNUSED,
+                                                         guint         n_param_values,
+                                                         const GValue *param_values,
+                                                         gpointer      invocation_hint G_GNUC_UNUSED,
+                                                         gpointer      marshal_data)
+{
+  typedef void (*GMarshalFunc_VOID__BOOLEAN_UINT_INT_STRING) (gpointer     data1,
+                                                              gboolean     arg_1,
+                                                              guint        arg_2,
+                                                              gint         arg_3,
+                                                              gpointer     arg_4,
+                                                              gpointer     data2);
+  register GMarshalFunc_VOID__BOOLEAN_UINT_INT_STRING callback;
+  register GCClosure *cc = (GCClosure*) closure;
+  register gpointer data1, data2;
+
+  g_return_if_fail (n_param_values == 5);
+
+  if (G_CCLOSURE_SWAP_DATA (closure))
+    {
+      data1 = closure->data;
+      data2 = g_value_peek_pointer (param_values + 0);
+    }
+  else
+    {
+      data1 = g_value_peek_pointer (param_values + 0);
+      data2 = closure->data;
+    }
+  callback = (GMarshalFunc_VOID__BOOLEAN_UINT_INT_STRING) (marshal_data ? marshal_data : cc->callback);
+
+  callback (data1,
+            g_marshal_value_peek_boolean (param_values + 1),
+            g_marshal_value_peek_uint (param_values + 2),
+            g_marshal_value_peek_int (param_values + 3),
+            g_marshal_value_peek_string (param_values + 4),
+            data2);
+}
+
diff --git a/libmafw-gst-renderer/mafw-gst-renderer-marshal.h b/libmafw-gst-renderer/mafw-gst-renderer-marshal.h
new file mode 100644 (file)
index 0000000..e04e265
--- /dev/null
@@ -0,0 +1,20 @@
+
+#ifndef __mafw_gst_renderer_marshal_MARSHAL_H__
+#define __mafw_gst_renderer_marshal_MARSHAL_H__
+
+#include       <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* VOID:BOOLEAN,UINT,INT,STRING (mafw-gst-renderer-marshal.list:2) */
+extern void mafw_gst_renderer_marshal_VOID__BOOLEAN_UINT_INT_STRING (GClosure     *closure,
+                                                                     GValue       *return_value,
+                                                                     guint         n_param_values,
+                                                                     const GValue *param_values,
+                                                                     gpointer      invocation_hint,
+                                                                     gpointer      marshal_data);
+
+G_END_DECLS
+
+#endif /* __mafw_gst_renderer_marshal_MARSHAL_H__ */
+
index 742d474..8c4d1c9 100644 (file)
@@ -253,7 +253,7 @@ static void _do_goto_index(MafwGstRendererState *self, guint index,
                           GError **error)
 {
         g_return_if_fail(MAFW_IS_GST_RENDERER_STATE_PAUSED(self));
-       self->renderer->worker->stay_paused = FALSE;
+       self->renderer->worker->stay_paused = TRUE;
        mafw_gst_renderer_state_do_goto_index(self, index, error);
 }
 
@@ -315,6 +315,7 @@ static void _playlist_contents_changed(MafwGstRendererState *self,
           played if that's been suggested with renderer->resume_playlist */
        mode = mafw_gst_renderer_get_playback_mode(self->renderer);
        if (clip_changed && mode == MAFW_GST_RENDERER_MODE_PLAYLIST) {
+               self->renderer->worker->stay_paused = TRUE;
                mafw_gst_renderer_state_do_play(self, error);
        }
 }
index fdf8a17..801a9c3 100644 (file)
@@ -327,7 +327,7 @@ static void _notify_metadata(MafwGstRendererState *self,
 
                 /* Play the available uri(s) */
                 if (nuris == 1) {
-                       mafw_gst_renderer_worker_play(renderer->worker, uri);
+                       mafw_gst_renderer_worker_play(renderer->worker, uri, NULL);
                } else {
                         mafw_gst_renderer_worker_play_alternatives(
                                 renderer->worker, uris);
index 4d17ea9..31aa22b 100644 (file)
@@ -122,8 +122,11 @@ static void _ext_stream_restore_read_cb(pa_context *c,
 
        if (_pa_operation_running(wvolume) ||
            (wvolume->pending_operation &&
-            (wvolume->pending_operation_volume != volume ||
-             wvolume->pending_operation_mute != mute))) {
+            (wvolume->pending_operation_volume != volume
+#ifdef MAFW_GST_RENDERER_ENABLE_MUTE
+               || wvolume->pending_operation_mute != mute
+#endif
+       ))) {
                g_debug("volume notification, but operation running, ignoring");
                return;
        }
@@ -143,6 +146,7 @@ static void _ext_stream_restore_read_cb(pa_context *c,
                                    wvolume->user_data);
                }
        }
+#ifdef MAFW_GST_RENDERER_ENABLE_MUTE
        if (!wvolume->pending_operation &&
            wvolume->pulse_mute != wvolume->current_mute) {
                wvolume->current_mute = wvolume->pulse_mute;
@@ -152,6 +156,7 @@ static void _ext_stream_restore_read_cb(pa_context *c,
                                         wvolume->mute_user_data);
                }
        }
+#endif
 
        wvolume->pending_operation = FALSE;
 }
@@ -415,8 +420,11 @@ static gboolean _set_timeout(gpointer data)
        if (wvolume->pending_operation) {
                g_debug("setting volume ignored as there is still a pending "
                        "operation. Waiting till next iteration");
-       } else if (wvolume->pulse_mute != wvolume->current_mute ||
-                  wvolume->pulse_volume != wvolume->current_volume) {
+       } else if (wvolume->pulse_volume != wvolume->current_volume
+#ifdef MAFW_GST_RENDERER_ENABLE_MUTE
+                       || wvolume->pulse_mute != wvolume->current_mute
+#endif
+                       ) {
 
                info.name = MAFW_GST_RENDERER_WORKER_VOLUME_ROLE_PREFIX
                        MAFW_GST_RENDERER_WORKER_VOLUME_ROLE;
index e2a95fd..2404608 100644 (file)
@@ -45,6 +45,7 @@
 #include "mafw-gst-renderer-worker.h"
 #include "mafw-gst-renderer-utils.h"
 #include "blanking.h"
+#include "keypad.h"
 
 #undef  G_LOG_DOMAIN
 #define G_LOG_DOMAIN "mafw-gst-renderer-worker"
                                  GST_TIME_AS_SECONDS((ns)):\
                                  GST_TIME_AS_SECONDS((ns))+1)
 
+#define _current_metadata_add(worker, key, type, value)        \
+               do { \
+                       if (!worker->current_metadata) \
+                               worker->current_metadata = mafw_metadata_new(); \
+                       /* At first remove old value */ \
+                       g_hash_table_remove(worker->current_metadata, key); \
+                       mafw_metadata_add_something(worker->current_metadata, \
+                                       key, type, 1, value); \
+               } while (0)
+
 /* Private variables. */
 /* Global reference to worker instance, needed for Xerror handler */
 static MafwGstRendererWorker *Global_worker = NULL;
@@ -74,10 +85,39 @@ static void _play_pl_next(MafwGstRendererWorker *worker);
 
 static void _emit_metadatas(MafwGstRendererWorker *worker);
 
-static void _current_metadata_add(MafwGstRendererWorker *worker,
-                                 const gchar *key, GType type,
-                                 const gpointer value);
+/* Playlist parsing */
+static void _on_pl_entry_parsed(TotemPlParser *parser, gchar *uri,
+                               gpointer metadata, GSList **plitems)
+{
+       if (uri != NULL) {
+               *plitems = g_slist_append(*plitems, g_strdup(uri));
+       }
+}
+static GSList *_parse_playlist(const gchar *uri)
+{
+       static TotemPlParser *pl_parser = NULL;
+       GSList *plitems = NULL;
+       gulong handler_id;
 
+       /* Initialize the playlist parser */
+       if (!pl_parser)
+       {
+               pl_parser = totem_pl_parser_new ();
+               g_object_set(pl_parser, "recurse", TRUE, "disable-unsafe",
+                    TRUE, NULL);
+       }
+       handler_id = g_signal_connect(G_OBJECT(pl_parser), "entry-parsed",
+                        G_CALLBACK(_on_pl_entry_parsed), &plitems);
+       /* Parsing */
+       if (totem_pl_parser_parse(pl_parser, uri, FALSE) !=
+           TOTEM_PL_PARSER_RESULT_SUCCESS) {
+               /* An error happens while parsing */
+               
+       }
+       g_signal_handler_disconnect(pl_parser, handler_id);
+       return plitems;
+}
+               
 /*
  * Sends @error to MafwGstRenderer.  Only call this from the glib main thread, or
  * face the consequences.  @err is free'd.
@@ -211,7 +251,7 @@ static void _emit_gst_buffer_as_graphic_file_cb(GstBuffer *new_buffer,
                        /* Add the info to the current metadata. */
                        _current_metadata_add(sgd->worker, sgd->metadata_key,
                                              G_TYPE_STRING,
-                                             (const gpointer) filename);
+                                             (gchar*)filename);
 
                        /* Emit the metadata. */
                        mafw_renderer_emit_metadata_string(sgd->worker->owner,
@@ -342,6 +382,7 @@ static void _emit_gst_buffer_as_graphic_file(MafwGstRendererWorker *worker,
                                                NULL, sgd);
                                }
                        }
+                       g_object_unref(loader);
                }
        }
 }
@@ -386,8 +427,8 @@ static void _add_ready_timeout(MafwGstRendererWorker *worker)
 
 static void _remove_ready_timeout(MafwGstRendererWorker *worker)
 {
-       g_debug("removing timeout for READY");
        if (worker->ready_timeout != 0) {
+               g_debug("removing timeout for READY");
                g_source_remove(worker->ready_timeout);
                worker->ready_timeout = 0;
        }
@@ -453,21 +494,19 @@ static gboolean _handle_video_info(MafwGstRendererWorker *worker,
        worker->media.fps = fps;
 
        /* Add the info to the current metadata. */
-       gint *p_width = g_new0(gint, 1);
-       gint *p_height = g_new0(gint, 1);
-       gdouble *p_fps = g_new0(gdouble, 1);
+       gint p_width, p_height, p_fps;
 
-       *p_width = width;* p_height = height; *p_fps = fps;
+       p_width = width;
+       p_height = height;
+       p_fps = fps;
 
        _current_metadata_add(worker, MAFW_METADATA_KEY_RES_X, G_TYPE_INT,
-                             (const gpointer) p_width);
+                             p_width);
        _current_metadata_add(worker, MAFW_METADATA_KEY_RES_Y, G_TYPE_INT,
-                             (const gpointer) p_height);
+                             p_height);
        _current_metadata_add(worker, MAFW_METADATA_KEY_VIDEO_FRAMERATE,
                              G_TYPE_DOUBLE,
-                             (const gpointer) p_fps);
-
-       g_free(p_width); g_free(p_height); g_free(p_fps);
+                             p_fps);
 
        /* Emit the metadata.*/
        g_idle_add((GSourceFunc)_emit_video_info, worker);
@@ -579,6 +618,7 @@ static GstBusSyncReply _sync_bus_handler(GstBus *bus, GstMessage *msg,
                                            MAFW_RENDERER_ERROR,
                                            MAFW_RENDERER_ERROR_PLAYBACK,
                                            "No video window XID set"));
+                       gst_message_unref (msg);
                        return GST_BUS_DROP;
                } else {
                        g_debug ("Video window to use is: %x", 
@@ -592,8 +632,13 @@ static GstBusSyncReply _sync_bus_handler(GstBus *bus, GstMessage *msg,
                mafw_gst_renderer_worker_set_autopaint(
                        worker,
                        worker->autopaint);
-               g_object_get(worker->vsink,
-                            "colorkey", &worker->colorkey, NULL);
+               if (worker->colorkey == -1)
+                       g_object_get(worker->vsink,
+                               "colorkey", &worker->colorkey, NULL);
+               else
+                       mafw_gst_renderer_worker_set_colorkey(
+                       worker,
+                       worker->colorkey);
                /* Defer the signal emission to the thread running the
                 * mainloop. */
                if (worker->colorkey != -1) {
@@ -602,8 +647,10 @@ static GstBusSyncReply _sync_bus_handler(GstBus *bus, GstMessage *msg,
                                             GST_OBJECT(worker->vsink),
                                             gst_structure_empty_new("ckey")));
                }
+               gst_message_unref (msg);
                return GST_BUS_DROP;
        }
+       /* do not unref message when returning PASS */
        return GST_BUS_PASS;
 }
 
@@ -649,26 +696,21 @@ static void _check_duration(MafwGstRendererWorker *worker, gint64 value)
                gint duration_seconds = NSECONDS_TO_SECONDS(value);
 
                if (!_seconds_duration_equal(worker->media.length_nanos,
-                                            value)) {
-                       gint64 *duration = g_new0(gint64, 1);
-                       *duration = duration_seconds;
-
+                                            value)) {                  
                        /* Add the duration to the current metadata. */
-                       _current_metadata_add(worker,
-                                             MAFW_METADATA_KEY_DURATION,
-                                             G_TYPE_INT64,
-                                             (const gpointer) duration);
-
+                       _current_metadata_add(worker, MAFW_METADATA_KEY_DURATION,
+                                               G_TYPE_INT64,
+                                               (gint64)duration_seconds);
                        /* Emit the duration. */
                        mafw_renderer_emit_metadata_int64(
                                worker->owner, MAFW_METADATA_KEY_DURATION,
-                               *duration);
-                       g_free(duration);
+                               (gint64)duration_seconds);
                }
 
                /* We compare this duration we just got with the
                 * source one and update it in the source if needed */
-               if (duration_seconds != renderer->media->duration) {
+               if (duration_seconds > 0 &&
+                       duration_seconds != renderer->media->duration) {
                        mafw_gst_renderer_update_source_duration(
                                renderer,
                                duration_seconds);
@@ -710,19 +752,16 @@ static void _check_seekability(MafwGstRendererWorker *worker)
        }
 
        if (worker->media.seekable != seekable) {
-               gboolean *is_seekable = g_new0(gboolean, 1);
-               *is_seekable = (seekable == SEEKABILITY_SEEKABLE) ? TRUE : FALSE;
+               gboolean is_seekable = (seekable == SEEKABILITY_SEEKABLE);
 
                /* Add the seekability to the current metadata. */
                _current_metadata_add(worker, MAFW_METADATA_KEY_IS_SEEKABLE,
-                       G_TYPE_BOOLEAN, (const gpointer) is_seekable);
+                       G_TYPE_BOOLEAN, is_seekable);
 
                /* Emit. */
                mafw_renderer_emit_metadata_boolean(
                        worker->owner, MAFW_METADATA_KEY_IS_SEEKABLE,
-                       *is_seekable);
-
-               g_free(is_seekable);
+                       is_seekable);
        }
 
        g_debug("media seekable: %d", seekable);
@@ -944,6 +983,7 @@ static void _handle_state_changed(GstMessage *msg, MafwGstRendererWorker *worker
                 if (worker->media.has_visual_content) {
                         blanking_prohibit();
                 }
+               keypadlocking_prohibit();
                /* Remove the ready timeout if we are playing [again] */
                _remove_ready_timeout(worker);
                 /* If mode is redundant we are trying to play one of several
@@ -1015,20 +1055,6 @@ static void _emit_renderer_art(MafwGstRendererWorker *worker,
 }
 #endif
 
-
-
-static void _current_metadata_add(MafwGstRendererWorker *worker,
-                                 const gchar *key, GType type,
-                                 const gpointer value)
-{
-       g_return_if_fail(value != NULL);
-
-       if (!worker->current_metadata)
-               worker->current_metadata = mafw_metadata_new();
-
-       mafw_metadata_add_something(worker->current_metadata, key, type, 1, value);
-}
-
 static GHashTable* _build_tagmap(void)
 {
        GHashTable *hash_table = NULL;
@@ -1115,24 +1141,26 @@ static void _emit_tag(const GstTagList *list, const gchar *tag,
 
                                g_value_init(&utf8gval, G_TYPE_STRING);
                                g_value_take_string(&utf8gval, utf8);
-                               _current_metadata_add(worker, mafwtag, G_TYPE_VALUE,
-                                       (const gpointer) &utf8gval);
+                               _current_metadata_add(worker, mafwtag, G_TYPE_STRING,
+                                                       utf8);
                                g_value_array_append(values, &utf8gval);
                                g_value_unset(&utf8gval);
                        }
                        g_free(orig);
                } else if (type == G_TYPE_UINT) {
                        GValue intgval = {0};
+                       gint intval;
 
                        g_value_init(&intgval, G_TYPE_INT);
                        g_value_transform(v, &intgval);
-                       _current_metadata_add(worker, mafwtag, G_TYPE_VALUE,
-                                       (const gpointer) &intgval);
+                       intval = g_value_get_int(&intgval);
+                       _current_metadata_add(worker, mafwtag, G_TYPE_INT,
+                                               intval);
                        g_value_array_append(values, &intgval);
                        g_value_unset(&intgval);
                } else {
                        _current_metadata_add(worker, mafwtag, G_TYPE_VALUE,
-                                       (const gpointer) v);
+                                               v);
                        g_value_array_append(values, v);
                }
        }
@@ -1216,7 +1244,7 @@ static void _handle_buffering(MafwGstRendererWorker *worker, GstMessage *msg)
         /* No state management needed for live pipelines */
         if (!worker->is_live) {
                worker->buffering = TRUE;
-               if (worker->state == GST_STATE_PLAYING) {
+               if (percent < 100 && worker->state == GST_STATE_PLAYING) {
                        g_debug("setting pipeline to PAUSED not to wolf the "
                                "buffer down");
                        worker->report_statechanges = FALSE;
@@ -1299,6 +1327,20 @@ static void _handle_buffering(MafwGstRendererWorker *worker, GstMessage *msg)
                                   the state change, since in 
                                   _handle_state_changed we do not do anything 
                                   if we are buffering  */
+
+                               /* Set the pipeline to playing. This is an async
+                                  handler, it could be, that the reported state
+                                  is not the real-current state */
+                               if (gst_element_set_state(
+                                               worker->pipeline,
+                                               GST_STATE_PLAYING) ==
+                                                       GST_STATE_CHANGE_ASYNC)
+                               {
+                                       /* XXX this blocks at most 2 seconds. */
+                                       gst_element_get_state(
+                                               worker->pipeline, NULL, NULL,
+                                               2 * GST_SECOND);
+                               }
                                if (worker->report_statechanges &&
                                    worker->notify_play_handler) {
                                        worker->notify_play_handler(
@@ -1461,6 +1503,20 @@ static gboolean _async_bus_handler(GstBus *bus, GstMessage *msg,
                        }
 
                        if (worker->mode == WORKER_MODE_SINGLE_PLAY) {
+                               if (err->domain == GST_STREAM_ERROR &&
+                                       err->code == GST_STREAM_ERROR_WRONG_TYPE)
+                               {/* Maybe it is a playlist? */
+                                       GSList *plitems = _parse_playlist(worker->media.location);
+                                       
+                                       if (plitems)
+                                       {/* Yes, it is a plitem */
+                                               g_error_free(err);
+                                               mafw_gst_renderer_worker_play(worker, NULL, plitems);
+                                               break;
+                                       }
+                                       
+                                       
+                               }
                                _send_error(worker, err);
                        }
                }
@@ -1568,6 +1624,8 @@ static void _volume_cb(MafwGstRendererWorkerVolume *wvolume, gdouble volume,
                                             &value);
 }
 
+#ifdef MAFW_GST_RENDERER_ENABLE_MUTE
+
 static void _mute_cb(MafwGstRendererWorkerVolume *wvolume, gboolean mute,
                     gpointer data)
 {
@@ -1583,6 +1641,8 @@ static void _mute_cb(MafwGstRendererWorkerVolume *wvolume, gboolean mute,
                                             &value);
 }
 
+#endif
+
 /* TODO: I think it's not enought to act on error, we need to handle
  * DestroyNotify on the given window ourselves, because for example helixbin
  * does it and silently stops the decoder thread.  But it doesn't notify
@@ -1755,9 +1815,9 @@ static void _construct_pipeline(MafwGstRendererWorker *worker)
 
                        /* These need a modified version of playbin. */
                        g_object_set(G_OBJECT(worker->pipeline),
-                                    "nw-queue", use_nw, NULL);
-                       g_object_set(G_OBJECT(worker->pipeline),
-                                    "no-video-transform", TRUE, NULL);
+                                    "nw-queue", use_nw,
+                                    "no-video-transform", TRUE,
+                                    NULL);
                }
        }
 
@@ -1786,7 +1846,7 @@ static void _construct_pipeline(MafwGstRendererWorker *worker)
                         G_CALLBACK(_stream_info_cb), worker);
 
 #ifndef MAFW_GST_RENDERER_DISABLE_PULSE_VOLUME
-       g_object_set(worker->pipeline, "flags", 103, NULL);
+       
 
        /* Set audio and video sinks ourselves. We create and configure
           them only once. */
@@ -1802,10 +1862,10 @@ static void _construct_pipeline(MafwGstRendererWorker *worker)
                        g_assert_not_reached();
                }
                gst_object_ref(worker->asink);
-               g_object_set(worker->asink, "buffer-time", 
-                            (gint64) MAFW_GST_BUFFER_TIME, NULL);
-               g_object_set(worker->asink, "latency-time", 
-                            (gint64) MAFW_GST_LATENCY_TIME, NULL);
+               g_object_set(worker->asink,
+                               "buffer-time", (gint64) MAFW_GST_BUFFER_TIME,
+                               "latency-time", (gint64) MAFW_GST_LATENCY_TIME,
+                               NULL);
        }
        g_object_set(worker->pipeline, "audio-sink", worker->asink, NULL);
 #endif
@@ -1822,12 +1882,15 @@ static void _construct_pipeline(MafwGstRendererWorker *worker)
                        g_assert_not_reached();
                }
                gst_object_ref(worker->vsink);
-               g_object_set(G_OBJECT(worker->vsink), "handle-events",
-                            TRUE, NULL);
-               g_object_set(worker->vsink, "force-aspect-ratio",
-                            TRUE, NULL);
-       }
-       g_object_set(worker->pipeline, "video-sink", worker->vsink, NULL);
+               g_object_set(G_OBJECT(worker->vsink),
+                               "handle-events", TRUE,
+                               "force-aspect-ratio", TRUE,
+                               NULL);
+       }
+       g_object_set(worker->pipeline,
+                       "video-sink", worker->vsink,
+                       "flags", 103,
+                       NULL);
 
        if (!worker->tsink) {
                worker->tsink = gst_element_factory_make("textoverlay", NULL);
@@ -2030,7 +2093,7 @@ void mafw_gst_renderer_worker_set_autopaint(
        worker->autopaint = autopaint;
        if (worker->vsink)
                g_object_set(worker->vsink, "autopaint-colorkey",
-                            autopaint, NULL);
+                            worker->autopaint, NULL);
 }
 
 gint mafw_gst_renderer_worker_get_colorkey(
@@ -2039,6 +2102,15 @@ gint mafw_gst_renderer_worker_get_colorkey(
        return worker->colorkey;
 }
 
+void mafw_gst_renderer_worker_set_colorkey(
+       MafwGstRendererWorker *worker, gint colorkey)
+{
+       worker->colorkey = colorkey;
+       if (worker->vsink)
+               g_object_set(worker->vsink, "colorkey",
+                            worker->colorkey, NULL);
+}
+
 gboolean mafw_gst_renderer_worker_get_seekable(MafwGstRendererWorker *worker)
 {
        return worker->media.seekable;
@@ -2060,17 +2132,6 @@ static void _play_pl_next(MafwGstRendererWorker *worker) {
        _start_play(worker);
 }
 
-static void _on_pl_entry_parsed(TotemPlParser *parser, gchar *uri,
-                               gpointer metadata, gpointer user_data)
-{
-       MafwGstRendererWorker *worker = user_data;
-
-       if (uri != NULL) {
-               worker->pl.items =
-                       g_slist_append(worker->pl.items, g_strdup(uri));
-       }
-}
-
 static void _do_play(MafwGstRendererWorker *worker)
 {
        g_assert(worker != NULL);
@@ -2104,46 +2165,33 @@ static void _do_play(MafwGstRendererWorker *worker)
 }
 
 void mafw_gst_renderer_worker_play(MafwGstRendererWorker *worker,
-                                 const gchar *uri)
+                                 const gchar *uri, GSList *plitems)
 {
-       g_assert(uri);
+       g_assert(uri || plitems);
 
        mafw_gst_renderer_worker_stop(worker);
        _reset_media_info(worker);
        _reset_pl_info(worker);
        /* Check if the item to play is a single item or a playlist. */
-       if (uri_is_playlist(uri)){
+       if (plitems || uri_is_playlist(uri)){
+               gchar *item;
                /* In case of a playlist we parse it and start playing the first
                   item of the playlist. */
-               TotemPlParser *pl_parser;
-               gchar *item;
-
-               /* Initialize the playlist parser */
-               pl_parser = totem_pl_parser_new ();
-               g_object_set(pl_parser, "recurse", TRUE, "disable-unsafe",
-                            TRUE, NULL);
-               g_signal_connect(G_OBJECT(pl_parser), "entry-parsed",
-                                G_CALLBACK(_on_pl_entry_parsed), worker);
-
-               /* Parsing */
-               if (totem_pl_parser_parse(pl_parser, uri, FALSE) !=
-                   TOTEM_PL_PARSER_RESULT_SUCCESS) {
-                       /* An error happens while parsing */
-                       _send_error(worker,
-                                   g_error_new(MAFW_RENDERER_ERROR,
-                                               MAFW_RENDERER_ERROR_PLAYLIST_PARSING,
-                                               "Playlist parsing failed: %s",
-                                               uri));
-                       return;
+               if (plitems)
+               {
+                       worker->pl.items = plitems;
                }
-
-               if (!worker->pl.items) {
-                       /* The playlist is empty */
+               else
+               {
+                       worker->pl.items = _parse_playlist(uri);
+               }
+               if (!worker->pl.items)
+               {
                        _send_error(worker,
-                                   g_error_new(MAFW_RENDERER_ERROR,
-                                               MAFW_RENDERER_ERROR_PLAYLIST_PARSING,
-                                               "The playlist %s is empty.",
-                                               uri));
+                           g_error_new(MAFW_RENDERER_ERROR,
+                                       MAFW_RENDERER_ERROR_PLAYLIST_PARSING,
+                                       "Playlist parsing failed: %s",
+                                       uri));
                        return;
                }
 
@@ -2155,9 +2203,6 @@ void mafw_gst_renderer_worker_play(MafwGstRendererWorker *worker,
                worker->pl.current = 0;
                item = (gchar *) g_slist_nth_data(worker->pl.items, 0);
                worker->media.location = g_strdup(item);
-
-               /* Free the playlist parser */
-               g_object_unref(pl_parser);
        } else {
                /* Single item. Set the playback mode according to that */
                worker->mode = WORKER_MODE_SINGLE_PLAY;
@@ -2259,6 +2304,7 @@ void mafw_gst_renderer_worker_stop(MafwGstRendererWorker *worker)
 
        /* We are not playing, so we can let the screen blank */
        blanking_allow();
+       keypadlocking_allow();
 
        /* And now get a fresh pipeline ready */
        _construct_pipeline(worker);
@@ -2290,6 +2336,7 @@ void mafw_gst_renderer_worker_pause(MafwGstRendererWorker *worker)
                                      2 * GST_SECOND);
                }
                blanking_allow();
+               keypadlocking_allow();
        }
 }
 
@@ -2344,7 +2391,9 @@ static void _volume_init_cb(MafwGstRendererWorkerVolume *wvolume,
        volume = mafw_gst_renderer_worker_volume_get(wvolume);
        mute = mafw_gst_renderer_worker_volume_is_muted(wvolume);
        _volume_cb(wvolume, volume, worker);
+#ifdef MAFW_GST_RENDERER_ENABLE_MUTE
        _mute_cb(wvolume, mute, worker);
+#endif
 }
 
 MafwGstRendererWorker *mafw_gst_renderer_worker_new(gpointer owner)
@@ -2391,7 +2440,12 @@ MafwGstRendererWorker *mafw_gst_renderer_worker_new(gpointer owner)
        mafw_gst_renderer_worker_volume_init(main_context,
                                             _volume_init_cb, worker,
                                             _volume_cb, worker,
-                                            _mute_cb, worker);
+#ifdef MAFW_GST_RENDERER_ENABLE_MUTE
+                                            _mute_cb,
+#else
+                                            NULL,
+#endif
+                                            worker);
        blanking_init();
        _construct_pipeline(worker);
 
index 01c8156..8168a1b 100644 (file)
@@ -208,9 +208,10 @@ XID mafw_gst_renderer_worker_get_xid(MafwGstRendererWorker *worker);
 gboolean mafw_gst_renderer_worker_get_autopaint(MafwGstRendererWorker *worker);
 void mafw_gst_renderer_worker_set_autopaint(MafwGstRendererWorker *worker, gboolean autopaint);
 gint mafw_gst_renderer_worker_get_colorkey(MafwGstRendererWorker *worker);
+void mafw_gst_renderer_worker_set_colorkey(MafwGstRendererWorker *worker, gint autopaint);
 gboolean mafw_gst_renderer_worker_get_seekable(MafwGstRendererWorker *worker);
 GHashTable *mafw_gst_renderer_worker_get_current_metadata(MafwGstRendererWorker *worker);
-void mafw_gst_renderer_worker_play(MafwGstRendererWorker *worker, const gchar *uri);
+void mafw_gst_renderer_worker_play(MafwGstRendererWorker *worker, const gchar *uri, GSList *plitems);
 void mafw_gst_renderer_worker_play_alternatives(MafwGstRendererWorker *worker, gchar **uris);
 void mafw_gst_renderer_worker_stop(MafwGstRendererWorker *worker);
 void mafw_gst_renderer_worker_pause(MafwGstRendererWorker *worker);
index 939a6fe..58d39c4 100644 (file)
@@ -175,7 +175,7 @@ static void _connection_init(MafwGstRenderer *renderer);
  * Registers the plugin descriptor making this plugin available to the
  * framework and applications
  */
-G_MODULE_EXPORT MafwPluginDescriptor mafw_gst_renderer_plugin_description = {
+G_MODULE_EXPORT MafwPluginDescriptor mafw_gst_subtitles_renderer_plugin_description = {
        { .name         = MAFW_GST_RENDERER_PLUGIN_NAME },
        .initialize     = mafw_gst_renderer_initialize,
        .deinitialize   = mafw_gst_renderer_deinitialize,
@@ -208,9 +208,8 @@ static void mafw_gst_renderer_class_init(MafwGstRendererClass *klass)
        GObjectClass *gclass = NULL;
        MafwRendererClass *renderer_class = NULL;
        const gchar *preloaded_plugins[] = {"playback", "uridecodebin",
-               "coreelements", "typefindfunctions", "omx", "selector",
-               "autodetect", "pulseaudio", "audioconvert", "audioresample",
-               "xvimagesink", "ffmpegcolorspace", "videoscale", NULL};
+                               "coreelements", "typefindfunctions", "dsp",
+                               "pulseaudio", "xvimagesink", NULL};
        gint i = 0;
        GObject *plugin;
 
@@ -284,7 +283,9 @@ static void mafw_gst_renderer_init(MafwGstRenderer *self)
        g_return_if_fail(renderer != NULL);
 
        mafw_extension_add_property(MAFW_EXTENSION(self), "volume", G_TYPE_UINT);
+#ifdef MAFW_GST_RENDERER_ENABLE_MUTE
        mafw_extension_add_property(MAFW_EXTENSION(self), "mute", G_TYPE_BOOLEAN);
+#endif
        mafw_extension_add_property(MAFW_EXTENSION(self), "xid", G_TYPE_UINT);
        mafw_extension_add_property(MAFW_EXTENSION(self), "error-policy", G_TYPE_UINT);
        MAFW_EXTENSION_SUPPORTS_AUTOPAINT(self);
@@ -2295,6 +2296,11 @@ static void mafw_gst_renderer_set_property(MafwExtension *self,
                        renderer->worker,
                        g_value_get_boolean(value));
        }
+       else if (!strcmp(key, MAFW_PROPERTY_RENDERER_COLORKEY)) {
+               mafw_gst_renderer_worker_set_colorkey(
+                       renderer->worker,
+                       g_value_get_int(value));
+       }
 #ifdef HAVE_GDKPIXBUF
        else if (!strcmp(key,
                         MAFW_PROPERTY_GST_RENDERER_CURRENT_FRAME_ON_PAUSE)) {