meta-digi: Add gsl-fls-plugin package.

The package is added in meta-fsl-arm and the customizations are done
in meta-fsl-del.

Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
This commit is contained in:
Alex Gonzalez 2012-11-21 10:21:20 +01:00
parent 855232c9a0
commit 5c765c43c5
17 changed files with 930 additions and 0 deletions

View File

@ -0,0 +1,41 @@
# Copyright (C) 2011 Freescale Semiconductor
# Copyright (C) 2012 Digi international
# Released under the MIT license (see COPYING.MIT for the terms)
DESCRIPTION = "Gstreamer freescale plugins"
LICENSE = "GPLv2 & LGPLv2 & LGPLv2.1"
SECTION = "multimedia"
DEPENDS = "gstreamer gst-plugins-base fsl-mm-codeclib imx-lib"
RDEPENDS_${PN} = "fsl-mm-codeclib"
INC_PR = "r5"
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
file://COPYING-LGPL-2;md5=5f30f0716dfdd0d91eb439ebec522ec2 \
file://COPYING-LGPL-2.1;md5=fbc093901857fcd118f065f900982c24"
SRC_URI = "${DIGI_LOG_MIRROR}/${PN}-${PV}.tar.gz \
"
inherit autotools pkgconfig
# Todo add a mechanism to map posible build targets
INCLUDE_DIR = "-I${STAGING_KERNEL_DIR}/include"
EXTRA_OEMAKE = "INCLUDES=${INCLUDE_DIR}"
EXTRA_OECONF = "PLATFORM=MX51 --disable-valgrind --disable-examples --disable-debug"
PACKAGES += "${PN}-libmfwsconf ${PN}-libgplaycore \
${PN}-libme ${PN}-libgstbufmeta ${PN}-libmfwba \
${PN}-libfwvss ${PN}-gplay"
FILES_${PN} = "${libdir}/gstreamer-0.10/*.so ${datadir}"
FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la"
FILES_${PN}-staticdev += "${libdir}/gstreamer-0.10/*.a"
FILES_${PN}-gplay = "${bindir}/gplay"
FILES_${PN}-libmfwsconf = "${libdir}/libmfwsconf${SOLIBS}"
FILES_${PN}-libgplaycore = "${libdir}/libgplaycore${SOLIBS}"
FILES_${PN}-libme = "${libdir}/libme${SOLIBS}"
FILES_${PN}-libgstbufmeta = "${libdir}/libgstbufmeta${SOLIBS}"
FILES_${PN}-libmfwba = "${libdir}/libmfwba${SOLIBS}"
FILES_${PN}-libfwvss = "${libdir}/libmfwvss${SOLIBS}"

View File

@ -0,0 +1,10 @@
# Copyright (C) 2011 Freescale Semicondutor
# Copyright (C) 2012 Digi International
# Released under the MIT license (see COPYING.MIT for the terms)
require gst-fsl-plugin.inc
PR = "${INC_PR}.0"
SRC_URI[md5sum] = "ab9fcca9d46a61c898862bcf18e3843c"
SRC_URI[sha256sum] = "a05cf407518528d10a2086e6952e5e93da3d311e1be0f8f20a8d765520afdd78"

View File

@ -0,0 +1,80 @@
From: Javier Viguera <javier.viguera@digi.com>
Date: Mon, 12 Mar 2012 12:47:31 +0100
Subject: [PATCH] ltmain
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
ltmain.sh | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/ltmain.sh b/ltmain.sh
index 0223495..7877159 100755
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -283,8 +283,9 @@ func_infer_tag ()
# line option must be used.
if test -z "$tagname"; then
$echo "$modename: unable to infer tagged configuration"
- $echo "$modename: specify a tag with \`--tag'" 1>&2
- exit $EXIT_FAILURE
+ $echo "$modename: defaulting to \`CC'"
+ $echo "$modename: if this is not correct, specify a tag with \`--tag'"
+# exit $EXIT_FAILURE
# else
# $echo "$modename: using $tagname tagged configuration"
fi
@@ -2434,8 +2435,14 @@ EOF
absdir="$abs_ladir"
libdir="$abs_ladir"
else
- dir="$libdir"
- absdir="$libdir"
+ # Adding 'libdir' from the .la file to our library search paths
+ # breaks crosscompilation horribly. We cheat here and don't add
+ # it, instead adding the path where we found the .la. -CL
+ dir="$abs_ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ #dir="$libdir"
+ #absdir="$libdir"
fi
test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
else
@@ -2574,7 +2581,7 @@ EOF
{ test "$use_static_libs" = no || test -z "$old_library"; }; then
if test "$installed" = no; then
notinst_deplibs="$notinst_deplibs $lib"
- need_relink=yes
+ need_relink=no
fi
# This is a shared library
@@ -5641,6 +5648,10 @@ fi\
# Replace all uninstalled libtool libraries with the installed ones
newdependency_libs=
for deplib in $dependency_libs; do
+ # Replacing uninstalled with installed can easily break crosscompilation,
+ # since the installed path is generally the wrong architecture. -CL
+ newdependency_libs="$newdependency_libs $deplib"
+ continue
case $deplib in
*.la)
name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
@@ -5962,10 +5973,13 @@ relink_command=\"$relink_command\""
# At present, this check doesn't affect windows .dll's that
# are installed into $libdir/../bin (currently, that works fine)
# but it's something to keep an eye on.
- if test "$inst_prefix_dir" = "$destdir"; then
- $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
- exit $EXIT_FAILURE
- fi
+ #
+ # This breaks install into our staging area. -PB
+ #
+ # if test "$inst_prefix_dir" = "$destdir"; then
+ # $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+ # exit $EXIT_FAILURE
+ # fi
if test -n "$inst_prefix_dir"; then
# Stick the inst_prefix_dir data into the link command.

View File

@ -0,0 +1,80 @@
From: Javier Viguera <javier.viguera@digi.com>
Date: Mon, 9 Apr 2012 12:44:06 +0200
Subject: [PATCH] gplay_fullscreen
* At start play the video with it's own resolution (not full-screened)
* Fix 'resize' command to set full-screen flag depending on the display
size.
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
src/misc/v4l_sink/src/mfw_gst_v4l.c | 4 ++--
src/misc/v4l_sink/src/mfw_gst_v4lsink.c | 2 +-
tools/gplay/mfw_gplay_core.c | 16 ++++++++++++++++
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/misc/v4l_sink/src/mfw_gst_v4l.c b/src/misc/v4l_sink/src/mfw_gst_v4l.c
index 8c2ed72..b85879a 100755
--- a/src/misc/v4l_sink/src/mfw_gst_v4l.c
+++ b/src/misc/v4l_sink/src/mfw_gst_v4l.c
@@ -1355,11 +1355,11 @@ mfw_gst_v4l2_display_init (MFW_GST_V4LSINK_INFO_T * v4l_info,
height = (disp_height >> 3) << 3;
if (width == 0) {
GST_WARNING("Wrong display width information");
- width = v4l_info->fullscreen_width;
+ width = v4l_info->width;
}
if (height == 0) {
GST_WARNING("Wrong display height information");
- height = v4l_info->fullscreen_height;
+ height = v4l_info->height;
}
return ( mfw_gst_v4l2_set_crop(v4l_info, width, height) );
diff --git a/src/misc/v4l_sink/src/mfw_gst_v4lsink.c b/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
index c6a6b6c..b2c7b3d 100755
--- a/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
+++ b/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
@@ -976,7 +976,7 @@ mfw_gst_v4lsink_show_frame (GstBaseSink * basesink, GstBuffer * buf)
v4l_info->disp_height);
if (result != TRUE) {
- g_print ("\nFailed to initalize the display\n");
+ GST_WARNING ("Failed to initalize the display");
g_mutex_unlock (v4l_info->flow_lock);
return GST_FLOW_OK;
}
diff --git a/tools/gplay/mfw_gplay_core.c b/tools/gplay/mfw_gplay_core.c
index 4705cac..e5569fc 100755
--- a/tools/gplay/mfw_gplay_core.c
+++ b/tools/gplay/mfw_gplay_core.c
@@ -1583,6 +1583,9 @@ fsl_player_ret_val fsl_player_resize(fsl_player_handle handle, fsl_player_displa
fsl_player_property* pproperty = (fsl_player_property*)pplayer->property_handle;
GstElement* auto_video_sink = NULL;
GstElement* actual_video_sink = NULL;
+ fsl_player_s32 fullscreen_width = 0;
+ fsl_player_s32 fullscreen_height = 0;
+ fsl_player_s32 fb = 0;
g_object_get(pproperty->playbin, "video-sink", &auto_video_sink, NULL);
if( NULL == auto_video_sink )
@@ -1607,6 +1610,19 @@ fsl_player_ret_val fsl_player_resize(fsl_player_handle handle, fsl_player_displa
g_object_set(G_OBJECT(actual_video_sink), "disp-width", pproperty->display_parameter.disp_width, NULL);
g_object_set(G_OBJECT(actual_video_sink), "disp-height", pproperty->display_parameter.disp_height, NULL);
+ /* Set full-screen flag depending on the new display parameters */
+ fullscreen_fb0_open(&fb);
+ fullscreen_fb0_get_width_height(fb, &(fullscreen_width), &(fullscreen_height));
+ fullscreen_fb0_close(&fb);
+ if ((pproperty->display_parameter.offsetx == 0)
+ && (pproperty->display_parameter.offsety == 0)
+ && (pproperty->display_parameter.disp_width == fullscreen_width)
+ && (pproperty->display_parameter.disp_height == fullscreen_height)) {
+ pproperty->bfullscreen = 1;
+ } else {
+ pproperty->bfullscreen = 0;
+ }
+
update_mfw_v4lsink_parameter(actual_video_sink);
g_object_unref (actual_video_sink);

View File

@ -0,0 +1,185 @@
From 1767c2d99895b682a79a0b874379811e83f6f147 Mon Sep 17 00:00:00 2001
From: Alejandro Gonzalez <alex.gonzalez@digi.com>
Date: Tue, 13 Mar 2012 19:20:02 +0100
Subject: [PATCH] add-fb-dev
Add framebuffer select functionality to sink
To support displaying to the second monitor, the mfw_v4lsink sink
element needs to accept a device parameter specifying the framebuffer
device to use as output.
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
src/misc/v4l_sink/src/mfw_gst_fb.c | 15 +++++++++------
src/misc/v4l_sink/src/mfw_gst_fb.h | 1 -
src/misc/v4l_sink/src/mfw_gst_v4l.c | 4 ++++
src/misc/v4l_sink/src/mfw_gst_v4lsink.c | 27 +++++++++++++++++++++++++--
src/misc/v4l_sink/src/mfw_gst_v4lsink.h | 3 ++-
5 files changed, 40 insertions(+), 10 deletions(-)
diff --git a/src/misc/v4l_sink/src/mfw_gst_fb.c b/src/misc/v4l_sink/src/mfw_gst_fb.c
index 8c251da..fb13489 100755
--- a/src/misc/v4l_sink/src/mfw_gst_fb.c
+++ b/src/misc/v4l_sink/src/mfw_gst_fb.c
@@ -199,16 +199,19 @@ POST-CONDITIONS: None
IMPORTANT NOTES: None
=============================================================================*/
-gboolean mfw_gst_fb0_open(gint *fb)
+gboolean mfw_gst_fb0_open(MFW_GST_V4LSINK_INFO_T * v4l_info)
{
gboolean retval = TRUE;
gchar fb_device[100] = FB_DEIVCE;
- if ((*fb =
- open(fb_device, O_RDWR, 0)) < 0) {
- g_print("Unable to open %s %d\n", fb_device, *fb);
- *fb = 0;
- retval = FALSE;
+ if (v4l_info->device != NULL && v4l_info->device[0] != '\0')
+ strcpy(fb_device , v4l_info->device);
+
+ GST_DEBUG_OBJECT (v4l_info, "opened framebuffer %s", v4l_info->device);
+ if ((v4l_info->fd_fb = open(fb_device, O_RDWR, 0)) < 0) {
+ g_print("Unable to open %s %d\n", fb_device, v4l_info->fd_fb);
+ v4l_info->fd_fb = 0;
+ retval = FALSE;
}
return retval;
diff --git a/src/misc/v4l_sink/src/mfw_gst_fb.h b/src/misc/v4l_sink/src/mfw_gst_fb.h
index 01321d6..4876b73 100755
--- a/src/misc/v4l_sink/src/mfw_gst_fb.h
+++ b/src/misc/v4l_sink/src/mfw_gst_fb.h
@@ -50,7 +50,6 @@
gboolean mfw_gst_set_gbl_alpha(gint fb, gint alphaVal);
gboolean mfw_gst_fb0_set_colorkey(gint fb,gulong *colorSrc);
-gboolean mfw_gst_fb0_open(gint *fb);
gboolean mfw_gst_fb0_close(gint *fb);
#if ((defined (_MX37) || defined (_MX51)) && defined (LOC_ALPHA_SUPPORT))
diff --git a/src/misc/v4l_sink/src/mfw_gst_v4l.c b/src/misc/v4l_sink/src/mfw_gst_v4l.c
index b85879a..d773f6a 100755
--- a/src/misc/v4l_sink/src/mfw_gst_v4l.c
+++ b/src/misc/v4l_sink/src/mfw_gst_v4l.c
@@ -540,6 +540,10 @@ mfw_gst_v4l2_mx37_mx51_tv_close (MFW_GST_V4LSINK_INFO_T * v4l_info)
gint out = 3;
+ if (v4l_info->device && !strcmp(v4l_info->device, "/dev/fb1"))
+ out = 5;
+ g_free(v4l_info->device);
+
// mfw_gst_v4l2_mx37_mx51_tv_setblank (v4l_info);
v4l_info->tv_mode = NV_MODE;
diff --git a/src/misc/v4l_sink/src/mfw_gst_v4lsink.c b/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
index b2c7b3d..d7943c1 100755
--- a/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
+++ b/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
@@ -137,6 +137,7 @@ enum
TV_OUT,
TV_MODE,
#endif
+ DEVICE,
DUMP_LOCATION,
ADDITIONAL_BUFFER_DEPTH,
SETPARA,
@@ -741,6 +742,11 @@ mfw_gst_v4lsink_set_property (GObject * object, guint prop_id,
case DUMP_LOCATION:
dumpfile_set_location (v4l_info, g_value_get_string (value));
break;
+
+ case DEVICE:
+ v4l_info->device = g_strdup (g_value_get_string (value));
+ break;
+
case SETPARA:
v4l_info->setpara |= g_value_get_int (value);
break;
@@ -848,6 +854,10 @@ mfw_gst_v4lsink_get_property (GObject * object, guint prop_id,
case DUMP_LOCATION:
g_value_set_string (value, v4l_info->dump_location);
break;
+
+ case DEVICE:
+ g_value_set_string (value, v4l_info->device);
+ break;
case SETPARA:
g_value_set_int (value, v4l_info->setpara);
break;
@@ -1497,6 +1507,12 @@ mfw_gst_v4lsink_finalize (GObject * object)
}
+static void mfw_gst_v4lsink_start(GstBaseSink * bsink)
+{
+ MFW_GST_V4LSINK_INFO_T *v4l_info = MFW_GST_V4LSINK(bsink);
+ mfw_gst_fb0_open(v4l_info);
+}
+
/*=============================================================================
FUNCTION: mfw_gst_v4lsink_init
@@ -1541,6 +1557,7 @@ mfw_gst_v4lsink_init (MFW_GST_V4LSINK_INFO_T * v4l_info,
v4l_info->dump_location = NULL;
v4l_info->dumpfile = NULL;
v4l_info->dump_length = 0;
+ v4l_info->device = NULL;
v4l_info->cr_left_bypixel_orig = 0;
v4l_info->cr_right_bypixel_orig = 0;
v4l_info->cr_top_bypixel_orig = 0;
@@ -1573,8 +1590,6 @@ mfw_gst_v4lsink_init (MFW_GST_V4LSINK_INFO_T * v4l_info,
memset (&v4l_info->crop, 0, sizeof (struct v4l2_crop));
memset (&v4l_info->prevCrop, 0, sizeof (struct v4l2_crop));
- mfw_gst_fb0_open (&v4l_info->fd_fb);
-
v4l_info->chipcode = getChipCode();
v4l_info->v4l_id = -1;
@@ -1626,6 +1641,7 @@ mfw_gst_v4lsink_class_init (MFW_GST_V4LSINK_INFO_CLASS_T * klass)
parent_class = g_type_class_peek_parent (klass);
+ gstvs_class->start = GST_DEBUG_FUNCPTR (mfw_gst_v4lsink_start);
gobject_class->set_property = mfw_gst_v4lsink_set_property;
gobject_class->get_property = mfw_gst_v4lsink_get_property;
gobject_class->finalize = mfw_gst_v4lsink_finalize;
@@ -1730,6 +1746,13 @@ mfw_gst_v4lsink_class_init (MFW_GST_V4LSINK_INFO_CLASS_T * klass)
NULL,
G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class, DEVICE,
+ g_param_spec_string ("device",
+ "Framebuffer device",
+ "Framebuffer device to display output."
+ "/dev/fb0,/dev/fb1",
+ NULL,
+ G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO,
g_param_spec_boolean
diff --git a/src/misc/v4l_sink/src/mfw_gst_v4lsink.h b/src/misc/v4l_sink/src/mfw_gst_v4lsink.h
index 504e06f..4764868 100755
--- a/src/misc/v4l_sink/src/mfw_gst_v4lsink.h
+++ b/src/misc/v4l_sink/src/mfw_gst_v4lsink.h
@@ -279,6 +279,7 @@ typedef struct MFW_GST_V4LSINK_INFO_S
FILE *dumpfile;
guint64 dump_length;
+ gchar *device;
gint qbuff_count; /* buffer counter, increase when frame queued to v4l device */
@@ -367,7 +368,7 @@ typedef struct MFW_GST_V4LSINK_INFO_CLASS_S
=============================================================================*/
extern GType mfw_gst_v4lsink_get_type (void);
-
+gboolean mfw_gst_fb0_open(MFW_GST_V4LSINK_INFO_T * v4l_info);

View File

@ -0,0 +1,56 @@
From: Alex Gonzalez <alex.gonzalez@digi.com>
Date: Tue, 3 Apr 2012 13:51:45 +0200
Subject: [PATCH] mfw_v4lsrc_uyvy
Change the default pixelformat used by the plugin to uyvy which is
supported by the mt9v111 driver.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
---
src/misc/v4l_source/src/mfw_gst_v4lsrc.c | 19 ++++---------------
1 file changed, 4 insertions(+), 15 deletions(-)
diff --git a/src/misc/v4l_source/src/mfw_gst_v4lsrc.c b/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
index 8ff9b6f..d1057e3 100755
--- a/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
+++ b/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
@@ -425,11 +425,8 @@ static gint mfw_gst_v4lsrc_capture_setup(MFWGstV4LSrc *v4l_src)
in_height = v4l_src->capture_height;
}
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
-#ifdef MX51
- fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_NV12;
-#else
- fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
-#endif
+
+ fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_UYVY;
fmt.fmt.pix.width = in_width;
fmt.fmt.pix.height = in_height;
@@ -1225,11 +1222,7 @@ static GstCaps *mfw_gst_v4lsrc_get_caps (GstBaseSrc * src)
GstCaps *capslist;
GstPadTemplate *src_template = NULL;
gint i;
-#ifndef MX51
- guint32 format = GST_MAKE_FOURCC('I', '4', '2', '0');
-#else
- guint32 format = GST_MAKE_FOURCC('N', 'V', '1', '2');
-#endif
+ guint32 format = GST_MAKE_FOURCC('U', 'Y', 'V', 'Y');
capslist = gst_caps_new_empty();
@@ -1273,11 +1266,7 @@ static void mfw_gst_v4lsrc_fixate(GstPad * pad, GstCaps * caps)
GstStructure *structure=NULL;
MFWGstV4LSrc *v4l_src =
MFW_GST_V4LSRC(gst_pad_get_parent (pad));
-#ifndef MX51
- guint32 fourcc = GST_MAKE_FOURCC('I', '4', '2', '0');
-#else
- guint32 fourcc = GST_MAKE_FOURCC('N', 'V', '1', '2');
-#endif
+ guint32 fourcc = GST_MAKE_FOURCC('U', 'Y', 'V', 'Y');
const GValue *v=NULL;
for (i = 0; i < gst_caps_get_size (caps); ++i) {

View File

@ -0,0 +1,95 @@
From: Alex Gonzalez <alex.gonzalez@digi.com>
Date: Tue, 3 Apr 2012 13:52:50 +0200
Subject: [PATCH] mfw_v4lsec_def_sizes
Change the default dimensions to the ones supported by the mt9v111 driver.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
---
src/misc/v4l_source/src/mfw_gst_v4lsrc.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/misc/v4l_source/src/mfw_gst_v4lsrc.c b/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
index d1057e3..968deb7 100755
--- a/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
+++ b/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
@@ -1304,8 +1304,8 @@ IMPORTANT NOTES: None
=============================================================================*/
static void mfw_gst_v4lsrc_init(MFWGstV4LSrc * v4l_src, MFWGstV4LSrcClass * klass)
{
- v4l_src->capture_width=176;
- v4l_src->capture_height=144;
+ v4l_src->capture_width=640;
+ v4l_src->capture_height=480;
v4l_src->fps_n=30;
v4l_src->fps_d=1;
v4l_src->fd_v4l=-1;
@@ -1315,12 +1315,12 @@ static void mfw_gst_v4lsrc_init(MFWGstV4LSrc * v4l_src, MFWGstV4LSrcClass * klas
v4l_src->crop_pixel=0;
v4l_src->rotate=0;
v4l_src->preview=FALSE;
- v4l_src->preview_width=160;
- v4l_src->preview_height=128;
+ v4l_src->preview_width=640;
+ v4l_src->preview_height=480;
v4l_src->preview_top=0;
v4l_src->preview_left=0;
- v4l_src->sensor_width=1280;
- v4l_src->sensor_height=1024;
+ v4l_src->sensor_width=640;
+ v4l_src->sensor_height=480;
v4l_src->capture_mode = 0;
v4l_src->bg = FALSE;
#ifdef MX27
@@ -1372,14 +1372,14 @@ static void mfw_gst_v4lsrc_class_init(MFWGstV4LSrcClass * klass)
g_param_spec_int("capture-width",
"capture_width",
"gets the width of the image to be captured",
- 16, 1768, 176,
+ 16, 1768, 640,
G_PARAM_READWRITE));
g_object_class_install_property(gobject_class, MFW_V4L_SRC_HEIGHT,
g_param_spec_int("capture-height",
"capture_height",
"gets the height of the image to be captured",
- 16, 1168, 144,
+ 16, 1168, 480,
G_PARAM_READWRITE));
g_object_class_install_property(gobject_class, MFW_V4L_SRC_PREVIEW_WIDTH,
@@ -1387,7 +1387,7 @@ static void mfw_gst_v4lsrc_class_init(MFWGstV4LSrcClass * klass)
"preview_width",
"gets the width of the image to be displayed for preview. \n"
"\t\t\tNote:property is valid only when preview property is enabled",
- 16, 1768, 176,
+ 16, 1768, 640,
G_PARAM_READWRITE));
g_object_class_install_property(gobject_class, MFW_V4L_SRC_PREVIEW_HEIGHT,
@@ -1395,7 +1395,7 @@ static void mfw_gst_v4lsrc_class_init(MFWGstV4LSrcClass * klass)
"preview_height",
"gets the height of the image to be displayed for preview. \n"
"\t\t\tNote:property is valid only when preview property is enabled",
- 16, 1168, 144,
+ 16, 1168, 480,
G_PARAM_READWRITE));
g_object_class_install_property(gobject_class, MFW_V4L_SRC_PREVIEW_TOP,
@@ -1471,14 +1471,14 @@ static void mfw_gst_v4lsrc_class_init(MFWGstV4LSrcClass * klass)
"sensor_width",
"gets the width of the sensor",
16,
- G_MAXINT, 1280,
+ G_MAXINT, 640,
G_PARAM_READWRITE));
g_object_class_install_property(gobject_class, MFW_V4L_SRC_SENSOR_HEIGHT,
g_param_spec_int("sensor-height",
"sensor_height",
"gets the height of the sensor",
16,
- G_MAXINT, 1024,
+ G_MAXINT, 480,
G_PARAM_READWRITE));
g_object_class_install_property(gobject_class, MFW_V4L_SRC_CAPTURE_MODE,

View File

@ -0,0 +1,25 @@
From: Alex Gonzalez <alex.gonzalez@digi.com>
Date: Tue, 3 Apr 2012 13:54:50 +0200
Subject: [PATCH] mfw_v4lsrc_create_segfault
Fix a segfault that happend when the create function returns GST_FLOW_OK
but the returned buffer is NULL.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
---
src/misc/v4l_source/src/mfw_gst_v4lsrc.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/misc/v4l_source/src/mfw_gst_v4lsrc.c b/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
index 968deb7..9388edd 100755
--- a/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
+++ b/src/misc/v4l_source/src/mfw_gst_v4lsrc.c
@@ -1195,6 +1195,8 @@ static GstFlowReturn mfw_gst_v4lsrc_create (GstPushSrc * src, GstBuffer ** buf)
{
MFWGstV4LSrc *v4l_src = MFW_GST_V4LSRC(src);
*buf = mfw_gst_v4lsrc_buffer_new (v4l_src);
+ if(*buf == NULL)
+ return GST_FLOW_ERROR;
return GST_FLOW_OK;
}

View File

@ -0,0 +1,67 @@
From: Javier Viguera <javier.viguera@digi.com>
Date: Tue, 13 Mar 2012 19:05:39 +0100
Subject: [PATCH] gplay_rotate
* Fix 'rotate' gplay command
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
src/misc/v4l_sink/src/mfw_gst_v4l.c | 5 ++++-
src/misc/v4l_sink/src/mfw_gst_v4lsink.c | 1 +
src/misc/v4l_sink/src/mfw_gst_v4lsink.h | 1 +
3 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/misc/v4l_sink/src/mfw_gst_v4l.c b/src/misc/v4l_sink/src/mfw_gst_v4l.c
index d773f6a..cb999d2 100755
--- a/src/misc/v4l_sink/src/mfw_gst_v4l.c
+++ b/src/misc/v4l_sink/src/mfw_gst_v4l.c
@@ -845,6 +845,7 @@ mfw_gst_v4l2_set_rotation (MFW_GST_V4LSINK_INFO_T * v4l_info)
/* Set the rotation */
ctrl.id = V4L2_CID_PRIVATE_BASE;
ctrl.value = v4l_info->rotate;
+ v4l_info->changedRotate = (v4l_info->prevRotate != v4l_info->rotate) ? TRUE : FALSE;
v4l_info->prevRotate = v4l_info->rotate;
if (ioctl (v4l_info->v4l_id, VIDIOC_S_CTRL, &ctrl) < 0) {
GST_ERROR ("set ctrl failed");
@@ -1288,7 +1289,7 @@ mfw_gst_v4l2_set_crop (MFW_GST_V4LSINK_INFO_T * v4l_info,
crop->c.left, crop->c.top, crop->c.width, crop->c.height);
if ((!memcmp (crop, prevCrop, sizeof (struct v4l2_crop)))
- && (v4l_info->rotate == v4l_info->prevRotate)) {
+ && !v4l_info->changedRotate) {
// mfw_gst_v4l2_streamoff(v4l_info);
return FALSE;
@@ -1303,6 +1304,8 @@ mfw_gst_v4l2_set_crop (MFW_GST_V4LSINK_INFO_T * v4l_info,
}
+ /* Reset changedRotate flag */
+ v4l_info->changedRotate = FALSE;
if (ioctl (v4l_info->v4l_id, VIDIOC_S_CROP, crop) < 0) {
GST_ERROR ("set crop failed");
diff --git a/src/misc/v4l_sink/src/mfw_gst_v4lsink.c b/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
index d7943c1..e4f6aa0 100755
--- a/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
+++ b/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
@@ -1540,6 +1540,7 @@ mfw_gst_v4lsink_init (MFW_GST_V4LSINK_INFO_T * v4l_info,
v4l_info->axis_left = 0;
v4l_info->rotate = 0;
v4l_info->prevRotate = 0;
+ v4l_info->changedRotate = FALSE;
v4l_info->crop_left = 0;
v4l_info->crop_top = 0;
diff --git a/src/misc/v4l_sink/src/mfw_gst_v4lsink.h b/src/misc/v4l_sink/src/mfw_gst_v4lsink.h
index 28cd6b7..159d3e7 100755
--- a/src/misc/v4l_sink/src/mfw_gst_v4lsink.h
+++ b/src/misc/v4l_sink/src/mfw_gst_v4lsink.h
@@ -255,6 +255,7 @@ typedef struct MFW_GST_V4LSINK_INFO_S
gint axis_left; /* diplay left co-ordinate */
gint rotate; /* display rotate angle */
gint prevRotate; /* Previous display rotate angle */
+ gboolean changedRotate; /* There was a rotation change */
gint v4l_id; /* device ID */
gint cr_left_bypixel; /* crop left offset set by decoder in caps */
gint cr_right_bypixel; /* crop right offset set by decoder in caps */

View File

@ -0,0 +1,37 @@
From: Alex Gonzalez <alex.gonzalez@digi.com>
Date: Mon, 9 Apr 2012 18:20:01 +0200
Subject: [PATCH] mfw_isink: Set defaults if no vssconfig found.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
---
libs/vss/vss_common.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/libs/vss/vss_common.c b/libs/vss/vss_common.c
index 757c2fc..c6ac428 100755
--- a/libs/vss/vss_common.c
+++ b/libs/vss/vss_common.c
@@ -390,6 +390,22 @@ next:
cs = cs->next;
}
+ if( cs == NULL ){
+ for (i=0;i<VD_MAX;i++){
+ VideoDevice * vd;
+
+ VS_MESSAGE("No vssconfig, setting defaults.\n");
+ vd = &control->devices[i];
+ vd->fbidx = i;
+ vd->main_fbidx = i;
+ vd->fmt = fmt_from_str("RGBP");
+ sprintf(vd->name, "DISP%d", i);
+ vd->vsmax = 4;
+ vd->mode_num = 0;
+ _getVideoDeviceInfo(vd);
+ }
+ }
+
sconf_free_cs(css);
}

View File

@ -0,0 +1,29 @@
From: Alex Gonzalez <alex.gonzalez@digi.com>
Date: Tue, 10 Apr 2012 12:21:29 +0200
Subject: [PATCH] gst-fsl-plugin: Clear framebuffer of spurious content.
When starting a video right after boot, there is some content in the
framebuffer which remains. The blank/unblank operation gets rid of it.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
---
libs/vss/vss_common.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/libs/vss/vss_common.c b/libs/vss/vss_common.c
index c6ac428..fb80f42 100755
--- a/libs/vss/vss_common.c
+++ b/libs/vss/vss_common.c
@@ -486,6 +486,11 @@ int _initVideoDevice(VideoDevice * vd, int mode_idx)
vd->fbvar = fb_var;
+ // Clear framebuffer from spurious content
+ VS_MESSAGE("Blanking device /dev/fb%d.\n",vd->fbidx);
+ VS_IOCTL(fd, FBIOBLANK, error, FB_BLANK_POWERDOWN);
+ VS_IOCTL(fd, FBIOBLANK, error, FB_BLANK_UNBLANK);
+
if ((vd->resX==0) || (vd->resY==0))
goto error;

View File

@ -0,0 +1,57 @@
From: Alex Gonzalez <alex.gonzalez@digi.com>
Date: Wed, 2 May 2012 10:53:19 +0200
Subject: [PATCH] mfw_v4lsink: Do not ignore cropping dimensions.
When the sink issues a S_CROP followed by a S_OUTPUT, the later resets the
crop dimensions to full screen. In order to keep the cropping dimensions,
a new S_CROP needs to be issued after the S_OUTPUT.
This change reuses an init call that was only called in the case of X11
which reissues the crop. It also needs to make sure that the previous
crop information is erased, otherwise the cropping function will decide
that it won't perform a crop if the dimensions have not changed.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
---
src/misc/v4l_sink/src/mfw_gst_v4lsink.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/misc/v4l_sink/src/mfw_gst_v4lsink.c b/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
index e4f6aa0..b30f390 100755
--- a/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
+++ b/src/misc/v4l_sink/src/mfw_gst_v4lsink.c
@@ -1852,6 +1852,7 @@ mfw_gst_v4lsink_buffer_alloc (GstBaseSink * bsink, guint64 offset,
gint frame_buffer_size;
gint max_frames;
gint hwbuffernumforcodec;
+ struct v4l2_crop *prevCrop = &v4l_info->prevCrop;
gboolean result = FALSE;
@@ -1990,7 +1991,6 @@ mfw_gst_v4lsink_buffer_alloc (GstBaseSink * bsink, guint64 offset,
return GST_FLOW_ERROR;
}
-#ifdef USE_X11
/* Two cases:
* 1. VPU will request buffer first, when pipeline enter running state,
* every parameter is ready.
@@ -1999,13 +1999,15 @@ mfw_gst_v4lsink_buffer_alloc (GstBaseSink * bsink, guint64 offset,
*/
if (element->current_state == GST_STATE_PLAYING) {
+#ifdef USE_X11
GST_INFO("element state already switch to PLAYING, create event thread");
mfw_gst_v4lsink_create_event_thread(v4l_info);
+#endif
+ // Digi: Force the crop to take effect by losing the previous crop info
+ memset(prevCrop,0,sizeof(struct v4l2_crop));
mfw_gst_v4l2_display_init(v4l_info, v4l_info->disp_width, v4l_info->disp_height);
-
}
-#endif
/*
* The software H264 decoder need check the "num-buffers-required"

View File

@ -0,0 +1,28 @@
From: Javier Viguera <javier.viguera@digi.com>
Date: Thu, 10 May 2012 19:54:52 +0200
Subject: [PATCH] gplay_next_file
Add 'send_message_exit' to avoid blocking forever.
This fixes 'gplay' not exiting when you run 'play next file [>]' command
on the last file of the playlist.
CCORE_MX53_EXTENSIONS-142
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
tools/gplay/mfw_gplay.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/tools/gplay/mfw_gplay.c b/tools/gplay/mfw_gplay.c
index ee65100..de11e68 100755
--- a/tools/gplay/mfw_gplay.c
+++ b/tools/gplay/mfw_gplay.c
@@ -876,6 +876,7 @@ int main(int argc,char *argv[])
case '>': // Play next file
printf("next\n");
if (playlist_next(pplayer, opt)==NULL){
+ pplayer->klass->send_message_exit(pplayer);
player_exit(pplayer);
}
break;

View File

@ -0,0 +1,47 @@
From: Javier Viguera <javier.viguera@digi.com>
Date: Fri, 11 May 2012 13:15:07 +0200
Subject: [PATCH] gplay_repeat
Fix some issues related with 'repeat' command in gplay.
1. repeat_current not working if the item was the last one of the
playlist.
2. Running 'play previous [<]' does not honour 'repeat_current' mode and
jumps to previous item in the playlist anyway.
CCORE_MX53_EXTENSIONS-140
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
tools/gplay/mfw_gplay.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tools/gplay/mfw_gplay.c b/tools/gplay/mfw_gplay.c
index de11e68..5e5a6f1 100755
--- a/tools/gplay/mfw_gplay.c
+++ b/tools/gplay/mfw_gplay.c
@@ -151,6 +151,7 @@ PlayItem * playlist_next(fsl_player_handle handle, options* opt)
}
case FSL_PLAYER_REPEAT_CURRENT:
{
+ next = opt->current;
pplayer->klass->stop(pplayer);
//pplayer->klass->set_media_location(pplayer, opt->current->name, &drm_format);
pplayer->klass->play(pplayer);
@@ -172,6 +173,7 @@ fsl_player_ret_val playlist_previous(fsl_player_handle handle, options* opt)
PlayItem * current = opt->current;
PlayItem * next = getPrevItem(current);
+#if 0
if(next)
{
opt->current = next;
@@ -180,6 +182,7 @@ fsl_player_ret_val playlist_previous(fsl_player_handle handle, options* opt)
pplayer->klass->set_media_location(pplayer, opt->current->name, &drm_format);
pplayer->klass->play(pplayer);
}
+#endif
switch( opt->repeat )
{
case FSL_PLAYER_REPEAT_NONE:

View File

@ -0,0 +1,52 @@
From: Alex Gonzalez <alex.gonzalez@digi.com>
Date: Thu, 17 May 2012 10:46:39 +0200
Subject: [PATCH] gst-fsl-plugin: Only call MXCFB_SET_OVERLAY_POS with overlay framebuffer.
This is just to avoid the ioctl to return an error.
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
---
libs/vss/vss_common.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/libs/vss/vss_common.c b/libs/vss/vss_common.c
index fb80f42..114b45b 100755
--- a/libs/vss/vss_common.c
+++ b/libs/vss/vss_common.c
@@ -686,10 +686,14 @@ _setDeviceConfig(VideoDevice * vd)
int fd = _getDevicefd(vd);
- /* Workaround for ipu hardware, it need set to 0,0 before change another offset */
- pos.x = 0;
- pos.y = 0;
- VS_IOCTL(fd, MXCFB_SET_OVERLAY_POS, here1, &pos);
+
+ VS_IOCTL(fd, FBIOGET_FSCREENINFO, done, &fb_fix);
+ if( !strcmp(fb_fix.id,"DISP3 FG") ){
+ /* Workaround for ipu hardware, it need set to 0,0 before change another offset */
+ pos.x = 0;
+ pos.y = 0;
+ VS_IOCTL(fd, MXCFB_SET_OVERLAY_POS, here1, &pos);
+ }
here1:
VS_IOCTL(fd, FBIOBLANK, done, FB_BLANK_POWERDOWN);
@@ -711,10 +715,12 @@ here1:
VS_IOCTL(fd, FBIOGET_VSCREENINFO, done, &fb_var);
VS_IOCTL(fd, FBIOGET_FSCREENINFO, done, &fb_fix);
-
- pos.x = vd->disp.left;
- pos.y = vd->disp.top;
- VS_IOCTL(fd, MXCFB_SET_OVERLAY_POS, here2, &pos);
+
+ if( !strcmp(fb_fix.id,"DISP3 FG") ){
+ pos.x = vd->disp.left;
+ pos.y = vd->disp.top;
+ VS_IOCTL(fd, MXCFB_SET_OVERLAY_POS, here2, &pos);
+ }
here2:
VS_IOCTL(fd, FBIOBLANK, done, FB_BLANK_UNBLANK);

View File

@ -0,0 +1,25 @@
From: Alex Gonzalez <alex.gonzalez@digi.com>
Date: Mon, 21 May 2012 16:17:01 +0200
Subject: [PATCH] gst-fsl-plugin: Do not blank the display on device close.
CCORE_MX53_EXTENSIONS-156
Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
---
libs/vss/vss_common.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/libs/vss/vss_common.c b/libs/vss/vss_common.c
index 114b45b..8731da9 100755
--- a/libs/vss/vss_common.c
+++ b/libs/vss/vss_common.c
@@ -744,7 +744,7 @@ _closeDevice(VideoDevice * vd)
//if (vd->mode_num){
VS_IOCTL(fd, FBIOPUT_VSCREENINFO, done, &vd->fbvar);
//}
- VS_IOCTL(fd, FBIOBLANK, done, FB_BLANK_POWERDOWN);
+// VS_IOCTL(fd, FBIOBLANK, done, FB_BLANK_POWERDOWN);
close(fd);
gFBDescs[vd->fbidx].fb_fd = 0;

View File

@ -0,0 +1,16 @@
FILESEXTRAPATHS_prepend_del := "${THISDIR}/files"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0001-ltmain.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0002-gplay_fullscreen.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0003-add-fb-dev.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0004-mfw_v4lsrc_uyvy.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0005-mfw_v4lsec_def_sizes.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0006-mfw_v4lsrc_create_segfault.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0007-gplay_rotate.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0008-mfw_isink-set-defaults-if-no-vssconfig-found.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0009-mfw_isink-clear-framebuffer-of-spurious-content.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0010-mfw_v4lsink-Do-not-ignore-cropping-dimensions.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0011-gplay_next_file.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0012-gplay_repeat.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0013-Only-call-MXCFB_SET_OVERLAY_POS-with-overlay-framebuffer.patch"
SRC_URI_append_del += "file://gst-fsl-plugin-2.0.3-0014-Do-not-blank-the-display-on-device-close.patch"
PR_append_del = "+${DISTRO}.0"