Patchwork [meta-fsl-arm,V3] qt4-embedded: Allow use of Qt Media Player in multi-headed system

login
register
mail settings
Submitter Eric Nelson
Date Aug. 19, 2013, 2:13 p.m.
Message ID <1376921609-9180-1-git-send-email-eric.nelson@boundarydevices.com>
Download mbox | patch
Permalink /patch/55987/
State Accepted
Delegated to: Otavio Salvador
Headers show

Comments

Eric Nelson - Aug. 19, 2013, 2:13 p.m.
Qt-embedded can be used on multiple screens by using environment variables
QWS_DISPLAY, QWS_MOUSE_PROTO, et cetera.

The gstreamer element mfw_v4lsink used to accelerate media playback on i.MX
devices can also be pointed at different displays through the 'device'
property, but the current acceleration patch doesn't have a mechanism for
setting the property, and always uses the compiled-in default.

This patch allows userspace startup code to override the default through
the use of the 'v4lsinkdev' environment variable.

Please refer to the Qt4-embedded documentation for proper usage of the 
QWS_x environment variables and the Freescale Multimedia documentation
for descriptions of the various gstreamer elements.

A sequence of this for a secondary display might be this:

	export QWS_DISPLAY=linuxfb:/dev/fb2:1
	export v4lsinkdev=/dev/video19
	my-qt-app -qws

Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com>
---
V2 and V3 just have an expanded commit message.

 recipes-qt/qt4/qt4-embedded_4.8.5.bbappend         |  5 ++-
 ...renderer-Allow-v4l-device-from-environmen.patch | 46 ++++++++++++++++++++++
 2 files changed, 50 insertions(+), 1 deletion(-)
 create mode 100644 recipes-qt/qt4/qt4/0002-i.MX-video-renderer-Allow-v4l-device-from-environmen.patch
Otavio Salvador - Aug. 24, 2013, 5:48 p.m.
On Mon, Aug 19, 2013 at 11:13 AM, Eric Nelson
<eric.nelson@boundarydevices.com> wrote:
> Qt-embedded can be used on multiple screens by using environment variables
> QWS_DISPLAY, QWS_MOUSE_PROTO, et cetera.
>
> The gstreamer element mfw_v4lsink used to accelerate media playback on i.MX
> devices can also be pointed at different displays through the 'device'
> property, but the current acceleration patch doesn't have a mechanism for
> setting the property, and always uses the compiled-in default.
>
> This patch allows userspace startup code to override the default through
> the use of the 'v4lsinkdev' environment variable.
>
> Please refer to the Qt4-embedded documentation for proper usage of the
> QWS_x environment variables and the Freescale Multimedia documentation
> for descriptions of the various gstreamer elements.
>
> A sequence of this for a secondary display might be this:
>
>         export QWS_DISPLAY=linuxfb:/dev/fb2:1
>         export v4lsinkdev=/dev/video19
>         my-qt-app -qws
>
> Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com>

Applied to master; may you prepare same change for the X11 Qt4 recipe?
Eric Nelson - Aug. 24, 2013, 8:08 p.m.
On 08/24/2013 10:48 AM, Otavio Salvador wrote:
> On Mon, Aug 19, 2013 at 11:13 AM, Eric Nelson
> <eric.nelson@boundarydevices.com> wrote:
>> Qt-embedded can be used on multiple screens by using environment variables
>> QWS_DISPLAY, QWS_MOUSE_PROTO, et cetera.
>>
>> The gstreamer element mfw_v4lsink used to accelerate media playback on i.MX
>> devices can also be pointed at different displays through the 'device'
>> property, but the current acceleration patch doesn't have a mechanism for
>> setting the property, and always uses the compiled-in default.
>>
>> This patch allows userspace startup code to override the default through
>> the use of the 'v4lsinkdev' environment variable.
>>
>> Please refer to the Qt4-embedded documentation for proper usage of the
>> QWS_x environment variables and the Freescale Multimedia documentation
>> for descriptions of the various gstreamer elements.
>>
>> A sequence of this for a secondary display might be this:
>>
>>          export QWS_DISPLAY=linuxfb:/dev/fb2:1
>>          export v4lsinkdev=/dev/video19
>>          my-qt-app -qws
>>
>> Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com>
>
> Applied to master; may you prepare same change for the X11 Qt4 recipe?
>

Yep. Done.

I hadn't noticed that the Phonon patches were in two places, so
I also created an include file to make any updates easier.

Patch

diff --git a/recipes-qt/qt4/qt4-embedded_4.8.5.bbappend b/recipes-qt/qt4/qt4-embedded_4.8.5.bbappend
index 4c4d0c9..fc16670 100644
--- a/recipes-qt/qt4/qt4-embedded_4.8.5.bbappend
+++ b/recipes-qt/qt4/qt4-embedded_4.8.5.bbappend
@@ -2,7 +2,10 @@ 
 FILESEXTRAPATHS_prepend := "${THISDIR}/qt4:"
 
 SRC_URI_append_mx5 += "file://0001-Add-support-for-i.MX-codecs-to-phonon.patch"
-SRC_URI_append_mx6 += "file://0001-Add-support-for-i.MX-codecs-to-phonon.patch"
+SRC_URI_append_mx6 += " \
+	file://0001-Add-support-for-i.MX-codecs-to-phonon.patch \
+	file://0002-i.MX-video-renderer-Allow-v4l-device-from-environmen.patch \
+"
 
 DEPENDS_append_mx5 = " virtual/kernel virtual/libgles2"
 PACKAGE_ARCH_mx5 = "${MACHINE_ARCH}"
diff --git a/recipes-qt/qt4/qt4/0002-i.MX-video-renderer-Allow-v4l-device-from-environmen.patch b/recipes-qt/qt4/qt4/0002-i.MX-video-renderer-Allow-v4l-device-from-environmen.patch
new file mode 100644
index 0000000..0226db5
--- /dev/null
+++ b/recipes-qt/qt4/qt4/0002-i.MX-video-renderer-Allow-v4l-device-from-environmen.patch
@@ -0,0 +1,46 @@ 
+From 023befba9aad60ef58177fd987a6aa40c357b2b2 Mon Sep 17 00:00:00 2001
+From: Eric Nelson <eric.nelson@boundarydevices.com>
+Date: Fri, 16 Aug 2013 11:42:23 -0700
+Subject: [PATCH] i.MX video renderer: Allow v4l device from environment
+
+The i.MX6 supports multiple IPUs and multiple V4L2 output
+devices for each.
+
+Devices are numbered starting with /dev/video16 and defined
+for each configured display. In general, /dev/video16 will
+correspond to the RGB (background) layer for /dev/fb0.
+If a display is the first on an IPU, an additional V4L2
+output will be defined that corresponds to the normally
+YUV overlay (foreground) layer.
+
+This patch allows association of the proper device for
+a particular session for use in multi-headed applications.
+The default is /dev/video17:
+	export v4lsinkdev=/dev/video17
+
+Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com>
+---
+ src/3rdparty/phonon/gstreamer/widgetrenderer.cpp | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp b/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp
+index aa4925a..a502ccd 100644
+--- a/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp
++++ b/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp
+@@ -58,9 +58,12 @@ WidgetRenderer::WidgetRenderer(VideoWidget *videoWidget)
+         : AbstractRenderer(videoWidget)
+ {
+     if ((m_videoSink = gst_element_factory_make("mfw_v4lsink", NULL)) && m_videoSink != NULL) {
+-	
++	char *videodev;
+ 	gst_object_ref (GST_OBJECT (m_videoSink)); //Take ownership
+         gst_object_sink (GST_OBJECT (m_videoSink));
++	videodev=getenv("v4lsinkdev");
++	if (videodev)
++                g_object_set (G_OBJECT (m_videoSink), "device", videodev, NULL);
+     }
+ 
+     // Clear the background with black by default
+-- 
+1.8.1.2
+