From: Roman Moravcik Date: Wed, 5 May 2010 08:12:28 +0000 (+0200) Subject: Package updated to version mafw-gst-renderer-0.2.2010.07-2+0m5-1. X-Git-Tag: 0.2.2010.07-2+0m5-1 X-Git-Url: http://git.maemo.org/git/?a=commitdiff_plain;h=96e51230b8e83c98c4aa787534374251ce5248c0;p=mafwsubrenderer Package updated to version mafw-gst-renderer-0.2.2010.07-2+0m5-1. --- diff --git a/configure.ac b/configure.ac index 2b40819..a73df69 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/debian/changelog b/debian/changelog index 3ccd0af..e2ebb9a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 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 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 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 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 Thu, 07 Jan 2010 19:36:53 +0200 + +mafw-gst-renderer (0.2.2009.52-2) unstable; urgency=low + + * Version number increased. + + -- Tuomas Kamarainen 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 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 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 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 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 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 Tue, 24 Nov 2009 21:57:59 +0200 + +mafw-gst-renderer (0.1.2009.47-2) unstable; urgency=low + + * Version increased. + + -- Tuomas Kamarainen 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 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 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 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 Wed, 28 Oct 2009 23:48:22 +0200 - mafw-gst-renderer (0.1.2009.42-2) unstable; urgency=low * Version increased. diff --git a/debian/control b/debian/control index 3623123..5d5095d 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: mafw-gst-subtitles-renderer Section: misc Priority: optional Maintainer: Roman Moravcik -XSBC-Original-Maintainer: Juha Kellokoski +XSBC-Original-Maintainer: Mika Tapojarvi 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 index 0000000..a37ff89 --- /dev/null +++ b/debian/mafw-gst-subtitles-renderer.dirs @@ -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 index 0000000..7bcf082 --- /dev/null +++ b/debian/mafw-gst-subtitles-renderer.mafw.xsession @@ -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 diff --git a/debian/mafw-gst-subtitles-renderer.postinst b/debian/mafw-gst-subtitles-renderer.postinst index 924970d..4cda6c5 100644 --- a/debian/mafw-gst-subtitles-renderer.postinst +++ b/debian/mafw-gst-subtitles-renderer.postinst @@ -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 index e30e40b..0000000 --- a/debian/mafw-gst-subtitles-renderer.postrm +++ /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 index 50c864d..0000000 --- a/debian/mafw-gst-subtitles-renderer.preinst +++ /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 diff --git a/debian/mafw-gst-subtitles-renderer.prerm b/debian/mafw-gst-subtitles-renderer.prerm index 084ef87..d64b813 100644 --- a/debian/mafw-gst-subtitles-renderer.prerm +++ b/debian/mafw-gst-subtitles-renderer.prerm @@ -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; diff --git a/debian/rules b/debian/rules index 75b2eb8..478c03d 100755 --- a/debian/rules +++ b/debian/rules @@ -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 - diff --git a/libmafw-gst-renderer/Makefile.am b/libmafw-gst-renderer/Makefile.am index a564ab9..3cc2ac5 100644 --- a/libmafw-gst-renderer/Makefile.am +++ b/libmafw-gst-renderer/Makefile.am @@ -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 index 0000000..0af13a4 --- /dev/null +++ b/libmafw-gst-renderer/keypad.c @@ -0,0 +1,79 @@ +/* + * This file is a part of MAFW + * + * Copyright (C) 2007, 2008, 2009 Nokia Corporation, all rights reserved. + * + * Contact: Visa Smolander + * + * 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 +#include +#include +#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 index 0000000..f434567 --- /dev/null +++ b/libmafw-gst-renderer/keypad.h @@ -0,0 +1,34 @@ +/* + * This file is a part of MAFW + * + * Copyright (C) 2007, 2008, 2009 Nokia Corporation, all rights reserved. + * + * Contact: Visa Smolander + * + * 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 index 0000000..3682dcb --- /dev/null +++ b/libmafw-gst-renderer/mafw-gst-renderer-marshal.c @@ -0,0 +1,91 @@ +#include "mafw-gst-renderer-marshal.h" + +#include + + +#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 index 0000000..e04e265 --- /dev/null +++ b/libmafw-gst-renderer/mafw-gst-renderer-marshal.h @@ -0,0 +1,20 @@ + +#ifndef __mafw_gst_renderer_marshal_MARSHAL_H__ +#define __mafw_gst_renderer_marshal_MARSHAL_H__ + +#include + +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__ */ + diff --git a/libmafw-gst-renderer/mafw-gst-renderer-state-paused.c b/libmafw-gst-renderer/mafw-gst-renderer-state-paused.c index 742d474..8c4d1c9 100644 --- a/libmafw-gst-renderer/mafw-gst-renderer-state-paused.c +++ b/libmafw-gst-renderer/mafw-gst-renderer-state-paused.c @@ -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); } } diff --git a/libmafw-gst-renderer/mafw-gst-renderer-state-transitioning.c b/libmafw-gst-renderer/mafw-gst-renderer-state-transitioning.c index fdf8a17..801a9c3 100644 --- a/libmafw-gst-renderer/mafw-gst-renderer-state-transitioning.c +++ b/libmafw-gst-renderer/mafw-gst-renderer-state-transitioning.c @@ -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); diff --git a/libmafw-gst-renderer/mafw-gst-renderer-worker-volume.c b/libmafw-gst-renderer/mafw-gst-renderer-worker-volume.c index 4d17ea9..31aa22b 100644 --- a/libmafw-gst-renderer/mafw-gst-renderer-worker-volume.c +++ b/libmafw-gst-renderer/mafw-gst-renderer-worker-volume.c @@ -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; diff --git a/libmafw-gst-renderer/mafw-gst-renderer-worker.c b/libmafw-gst-renderer/mafw-gst-renderer-worker.c index e2a95fd..2404608 100644 --- a/libmafw-gst-renderer/mafw-gst-renderer-worker.c +++ b/libmafw-gst-renderer/mafw-gst-renderer-worker.c @@ -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" @@ -62,6 +63,16 @@ 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); diff --git a/libmafw-gst-renderer/mafw-gst-renderer-worker.h b/libmafw-gst-renderer/mafw-gst-renderer-worker.h index 01c8156..8168a1b 100644 --- a/libmafw-gst-renderer/mafw-gst-renderer-worker.h +++ b/libmafw-gst-renderer/mafw-gst-renderer-worker.h @@ -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); diff --git a/libmafw-gst-renderer/mafw-gst-renderer.c b/libmafw-gst-renderer/mafw-gst-renderer.c index 939a6fe..58d39c4 100644 --- a/libmafw-gst-renderer/mafw-gst-renderer.c +++ b/libmafw-gst-renderer/mafw-gst-renderer.c @@ -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)) {