diff options
author | 2011-04-17 19:18:10 +0200 | |
---|---|---|
committer | 2011-04-17 19:18:10 +0200 | |
commit | 18f87cb140ef5e299af0bb6576f20fd5834f508a (patch) | |
tree | f71f34fcddf3632271f1861f0e0f56297f0a26c3 | |
parent | Add ebuild for gst-plugins-v4l2. (diff) | |
download | pandaboard-18f87cb140ef5e299af0bb6576f20fd5834f508a.tar.gz pandaboard-18f87cb140ef5e299af0bb6576f20fd5834f508a.tar.bz2 pandaboard-18f87cb140ef5e299af0bb6576f20fd5834f508a.zip |
Add 2.6.38 ebuilds
99 files changed, 70 insertions, 11206 deletions
diff --git a/eclass/gst-plugins-good.eclass b/eclass/gst-plugins-good.eclass deleted file mode 100644 index e421744..0000000 --- a/eclass/gst-plugins-good.eclass +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -# Author : foser <foser@gentoo.org>, zaheerm <zaheerm@gentoo.org> - -# gst-plugins-good eclass for pandaboard overlay -# -# eclass to make external gst-plugins emergable on a per-plugin basis -# to solve the problem with gst-plugins generating far too much unneeded deps -# -# 3rd party applications using gstreamer now should depend on a set of plugins as -# defined in the source, obtain recommended plugins to use from -# Gentoo developers responsible for gstreamer <gnome@gentoo.org>, the application developer -# or the gstreamer team. - -inherit eutils versionator gst-plugins10 - - -### -# variable declarations -### - -MY_PN=gst-plugins-good -MY_PV=${PV%%_*} -MY_P=${MY_PN}-${MY_PV} - -# All relevant configure options for gst-plugins -# need a better way to extract these - -# First line for non-plugin build related configure options; second line for -# sys/ plugins; rest is split plugin options in order of ./configure --help output. -# Good ways of validation are seeing diff of old and new configure.ac, and ./configure --help -# -# This list is current to gst-plugins-good-0.10.23: -my_gst_plugins_good="gconftool zlib bz2 -directsound oss sunaudio osx_audio osx_video gst_v4l2 x xshm xvideo -aalib aalibtest annodex cairo esd esdtest flac gconf gdk_pixbuf hal jpeg -libcaca libdv libpng pulse dv1394 shout2 shout2test soup speex taglib wavpack" - -# When adding conditionals like below, be careful about having leading spaces in concat - -# sys/oss4 moved here since 0.10.23 -if version_is_at_least "0.10.23"; then - my_gst_plugins_good+=" oss4" -fi - - -#SRC_URI="mirror://gnome/sources/gst-plugins/${PV_MAJ_MIN}/${MY_P}.tar.bz2" -SRC_URI="http://gstreamer.freedesktop.org/src/gst-plugins-good/${MY_P}.tar.bz2" - -S=${WORKDIR}/${MY_P} -# added to remove circular deps -# 6/2/2006 - zaheerm -if [ "${PN}" != "${MY_PN}" ]; then -RDEPEND="=media-libs/gst-plugins-base-0.10*" -DEPEND="${RDEPEND} - >=sys-apps/sed-4 - dev-util/pkgconfig" -RESTRICT=test -fi - -### -# public functions -### - -gst-plugins-good_src_configure() { - - # disable any external plugin besides the plugin we want - local plugin gst_conf - - einfo "Configuring to build ${GST_PLUGINS_BUILD} plugin(s) ..." - - for plugin in ${my_gst_plugins_good}; do - gst_conf="${gst_conf} --disable-${plugin} " - done - - for plugin in ${GST_PLUGINS_BUILD}; do - gst_conf="${gst_conf} --enable-${plugin} " - done - - cd ${S} - econf ${@} --with-package-name="Gentoo GStreamer Ebuild" --with-package-origin="http://www.gentoo.org" --enable-experimental ${gst_conf} || die "./configure failure" - -} - -### -# public inheritable functions -### - -gst-plugins-good_src_unpack() { - -# local makefiles - - unpack ${A} - - # Link with the syswide installed gst-libs if needed -# gst-plugins10_find_plugin_dir -# cd ${S} - - # Remove generation of any other Makefiles except the plugin's Makefile -# if [ -d "${S}/sys/${GST_PLUGINS_BUILD_DIR}" ]; then -# makefiles="Makefile sys/Makefile sys/${GST_PLUGINS_BUILD_DIR}/Makefile" -# elif [ -d "${S}/ext/${GST_PLUGINS_BUILD_DIR}" ]; then -# makefiles="Makefile ext/Makefile ext/${GST_PLUGINS_BUILD_DIR}/Makefile" -# fi -# sed -e "s:ac_config_files=.*:ac_config_files='${makefiles}':" \ -# -i ${S}/configure - -} - -gst-plugins-good_src_compile() { - - gst-plugins-good_src_configure ${@} - - gst-plugins10_find_plugin_dir - emake || die "compile failure" - -} - -gst-plugins-good_src_install() { - - gst-plugins10_find_plugin_dir - einstall || die - - [[ -e README ]] && dodoc README -} - -EXPORT_FUNCTIONS src_unpack src_compile src_install diff --git a/media-libs/domx/Manifest b/media-libs/domx/Manifest deleted file mode 100644 index 1b6e6ab..0000000 --- a/media-libs/domx/Manifest +++ /dev/null @@ -1,2 +0,0 @@ -EBUILD domx-24.11-r0.ebuild 664 RMD160 f5b1510694b3e8ed851224226ff5d38ff2c1c39c SHA1 49a47849fda2cfb620e18481e7e66733f2e084fb SHA256 eac709f65366afc1ad9d0d1267d79d506e57d88e632f2da1d799a7900c5dce52 -EBUILD domx-24.11_p1-r0.ebuild 665 RMD160 82bcdb6d4f2b838b97f13e04392aaec8b70a4726 SHA1 5d4f965726cc83329d1d7bfabfe95ddbaa6c21da SHA256 c802c5b2084cfe5185663253ff9db9b84b03297f4ac7a2fd539174ed389576d7 diff --git a/media-libs/domx/domx-24.11-r0.ebuild b/media-libs/domx/domx-24.11-r0.ebuild deleted file mode 100644 index 15633ee..0000000 --- a/media-libs/domx/domx-24.11-r0.ebuild +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI=2 - -inherit git autotools eutils - -DESCRIPTION="Distributed OpenMAX for OMAP4 processors" -HOMEPAGE="http://github.com/mrchapp/domx" -DEPEND=">=media-libs/syslink-24.11 >=media-libs/syslink-d2c-24.11" -LICENSE="BSD" -KEYWORDS="arm" -SLOT="0" -IUSE="" - -SRC_URI="" -NPV=${PV/_/-}; NPV=${NPV^^} -EGIT_REPO_URI="git://github.com/mrchapp/domx.git" -EGIT_BRANCH="master" -# FIXME: Can't use tags? -#EGIT_COMMIT="L${NPV}" -EGIT_COMMIT="1378fb8e1b8304f401dfb1d6787ae13294d518ef" - -src_prepare() { - eautoreconf -} - -src_install() { - emake install DESTDIR="${D}" -} diff --git a/media-libs/domx/domx-24.11_p1-r0.ebuild b/media-libs/domx/domx-24.11_p1-r0.ebuild deleted file mode 100644 index 08bd72e..0000000 --- a/media-libs/domx/domx-24.11_p1-r0.ebuild +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI=2 - -inherit git autotools eutils - -DESCRIPTION="Distributed OpenMAX for OMAP4 processors" -HOMEPAGE="http://github.com/mrchapp/domx" -DEPEND=">=media-libs/syslink-24.11 >=media-libs/syslink-d2c-24.11" -LICENSE="BSD" -KEYWORDS="~arm" -SLOT="0" -IUSE="" - -SRC_URI="" -NPV=${PV/_/-}; NPV=${NPV^^} -EGIT_REPO_URI="git://github.com/mrchapp/domx.git" -EGIT_BRANCH="master" -# FIXME: Can't use tags? -#EGIT_COMMIT="L${NPV}" -EGIT_COMMIT="858802175f65b99ff64329800400642d9b44aabf" - -src_prepare() { - eautoreconf -} - -src_install() { - emake install DESTDIR="${D}" -} diff --git a/media-libs/gst-plugins-base/Manifest b/media-libs/gst-plugins-base/Manifest deleted file mode 100644 index 0cba68e..0000000 --- a/media-libs/gst-plugins-base/Manifest +++ /dev/null @@ -1,26 +0,0 @@ -AUX gst-0.10.32-0001-add-rowstride-support-to-video-utility-functions.patch 19478 RMD160 3314aa44215803242a9cd1b2f33987066b2d9255 SHA1 960ce8f2c0c12c1d79cac4ba667236ab5dc9c4a9 SHA256 453f54b8b2a00df3038b96096f65720ad09f78a83db356bbd3018a6dae519c56 -AUX gst-0.10.32-0002-stridetransform-skeletal-implementation-of-stridetra.patch 12038 RMD160 ae601020715b8049423418dd51c97ffd4cd84da6 SHA1 b0210b381c97a94b7542b3e103a0071bbce14cf6 SHA256 a8cbdef59063369c4bae3c87dc9d197fc950c9fb588ad9a3dcfcbca7f1ea02c9 -AUX gst-0.10.32-0003-stridetransform-implement-caps-negotiation-and-relat.patch 13666 RMD160 cd97b88ec464c8e8055c93a443ff7a0d31aa0d41 SHA1 500b157dca39a60751fd89edd29d23224b287fd9 SHA256 a2685bd2928796756e5217d10bee09679b99458e5c33ea90498725b379c060a6 -AUX gst-0.10.32-0004-stridetransform-implement-transform-function.patch 7985 RMD160 f246b2f9a27a6d94a7d21f2594bbb65f9dba08be SHA1 62174bf74b1b1086a3585df0178db703c8ddb108 SHA256 efcf08ac81ce74fedab80318db7e20eef0abda36ef9e03aed6c823426199bad8 -AUX gst-0.10.32-0005-add-gst_stride_transform_transform_size.patch 5629 RMD160 01a147ca359509d478aa69c40697735f3b339d4d SHA1 1e7a520e85b9364797764be5a755478e4becbb3b SHA256 3ca3bfac1d14ce43c2c1211038275a22b41b370bbfcadd06224bd68b6f79608b -AUX gst-0.10.32-0006-fix-a-small-typo.-need-to-use-the-smaller-of-new_wid.patch 1398 RMD160 fff110733e415d3a62b887ac5155d3200f821daa SHA1 0e331030afdf5be917c71f7b2d0a3961450159ef SHA256 e4ffd2ceefcb6bdf851d897ca63f57f5b33bc80210fcd2e70e8337738857a823 -AUX gst-0.10.32-0007-Add-NV12-support-in-stridetransform.patch 2909 RMD160 f77e0f781af75021ba4dbbc19fc181c38f5e7a7d SHA1 8eebe554050a4e7239e2d3c886f2d71e92c481ad SHA256 ee77cd62a3af64ab453d14e563ac142e1cc9a78422158d548fa412c3e6a5c6e1 -AUX gst-0.10.32-0008-add-basic-support-for-I420-NV12-colorspace-conversio.patch 6976 RMD160 e8c645b0a55e39cc70547eeb6eaed361b93f7770 SHA1 2fb572546b90b9e1566f8dd38854d307ea5fa897 SHA256 55c669534771130dbaf5bdd94a4a08031faf27900fb3d7981d4b5934510c5f11 -AUX gst-0.10.32-0009-fix-to-avoid-parsing-caps-on-every-frame.patch 1087 RMD160 ee3a3bbf77ad5c5726a30115caeb373c430553f9 SHA1 cfb3b914b88a278131d91e2dd48865765302d947 SHA256 52f163890b09cc2133739adb18788441329c71c10359a0a1a2e5bcee918bff1c -AUX gst-0.10.32-0010-refactor-stridetransform-to-make-it-easier-to-add-ne.patch 26534 RMD160 ccc77aef354ecc2f506dfe73d485a1edd5910e2a SHA1 837fdc52c72c09105356c12b361480b1ff03eb54 SHA256 1abf8e19bdbd7d4b404cc8803dce83da77be4fd98e1c940d6842f2ae3c6e29fd -AUX gst-0.10.32-0011-add-some-neon.patch 9024 RMD160 48388eea9e42f4a156cae6090f34c1732eec717f SHA1 dfe6de8382322ccab6889c3afb228fc3512f9816 SHA256 d9f3e1fbb8cfbcda0fa49cf976e7b318c55780a3f4216c030e4a6b1e1ec207c1 -AUX gst-0.10.32-0012-add-support-to-convert-to-YUY2-YUYV-color-format.patch 6307 RMD160 37c8cfdc0850f8b163747b029ce6ef7125a92bcf SHA1 5385dfa1622cc4b8639e03adc99dbb91d6de8b49 SHA256 f26b61b6c92bd064c423eadcc7b35dcd3573c7e313b0ecc142473124f37240ec -AUX gst-0.10.32-0013-Add-support-for-RGB565-to-stridetransform.patch 13641 RMD160 51386f4ebb999d90eff5ef786e27d07fa37e159a SHA1 1b0f6ee44a24c32247e165f357100d9a6a0cac6b SHA256 f8013cdb9943559fa14491c8e253f7c51a7a061e16c76acabe10f057f9066b6a -AUX gst-0.10.32-0014-stridetransform-updates-for-new-extra-anal-compiler-.patch 2398 RMD160 2fc97ee99088fb484f728d9d0c6ea0ae2509c32d SHA1 0b5aed4e09b7dad068d7048e9960ca980e46fd18 SHA256 749859c06913a633ead030f69d9cc5076d9425a95e720111876c8abf464a3d57 -AUX gst-0.10.32-0015-stridetransform-fix-problem-transforming-caps-with-l.patch 20488 RMD160 f5d8a82c2313dcde45b2220ead8bd2f1c356a2dd SHA1 c02b4ee4468134fd9eb27a755a031a0e113a509e SHA256 6313ea19aa2496f2e14e91c2d3812d6f9d9c82035635d4a978a8e7b963a8be6a -AUX gst-0.10.32-0016-modify-playbin-to-use-stridetransform.patch 2485 RMD160 cb93726b58319d71c95abc8195d1535785fbde85 SHA1 afcc848f8ab059452a68b1eea13735c5c431de89 SHA256 9e55a7d20b269d947875aba1e3ed66579a866696afda99e754093ff74b5d4fe5 -AUX gst-0.10.32-0017-playbin-disable-interlaced-support.patch 1108 RMD160 9d759f6f3028811150df8aa01ccb114e73b3f2df SHA1 63802de92a41aec3a210615f9c7750621c9cd20c SHA256 31d306b25a4edf00b65146a92c74f8f1f6bf6aaf001b81b8df70affdddd2b5ab -AUX gst-0.10.32-0018-textoverlay-add-stride-support.patch 5213 RMD160 f1a10c218e9cc25b232f48e1cf890cf6a108dce4 SHA1 3d79d8b3f2037c807d61c427943e3a2cb1a0cf1d SHA256 cf0facafdf762e114c5ea56a5ad6420dd6a6269c674eb2f06af0eec17a4a0d9d -AUX gst-0.10.32-0019-video-more-flexible-video-caps-utility.patch 8691 RMD160 5b22d8a8f74bcf46e08671a160b6bce314f50b82 SHA1 862be817be2a3a6fdac3073efa2d6e53b161aa00 SHA256 a6b85a91555daf21c4228ea708be91de875997158b393b8e99422bc02c05f835 -AUX gst-0.10.32-0020-video-fix-endianess-issue-for-16bit-RGB-formats.patch 1343 RMD160 4fa95c02bfaf97dadf504f3aee2a7397afd4ac41 SHA1 bdc1d37a88cd3ce562a411474474608d7d1b9084 SHA256 3f8a7bf670e54af9bd3fdf8d56b22f5c9e6ff00616472e1c0b0b2493f6a561c8 -AUX gst-0.10.32-0021-stride-more-flexible-stride-color-conversion.patch 40158 RMD160 1d45d8b1e3084ac125b733e57bece2b1de01b096 SHA1 621a2f39835043114e08b4420c1d6e3731b568b9 SHA256 a38d4f60b3e38d45c38044133fe2ad1e799dc966e53c1dd292e63ad897101037 -AUX gst-0.10.32-0022-stride-support-for-32bit-RGB-formats.patch 1818 RMD160 d5a3ade8595272586ab934cc10ba7658fbc9121a SHA1 42f14b868bc68e2554e96d4ff8d94faa79863fbf SHA256 a74ac22cb796fc175fa2362fe48b7d2554f41e39228a993197a09e5002fc4fe1 -AUX gst-0.10.32-0023-ffmpegcolorspace-support-for-rowstride.patch 15546 RMD160 c389743544f5881bf7be1ce8df5682a0a8556285 SHA1 975b92fa352e3210b1013f5c6e98f6994b5737e7 SHA256 3843c61f9d49ba75dc6a20c9b7d57bcdc3bfbdf784ea93619ee68dd8bab72c6c -AUX gst-0.10.32-0024-discoverer-rowstride-support.patch 1552 RMD160 4e662a66b724a19dcb71e614a71198edd9d5fe5b SHA1 153a14d26dc2f90e0d060d78244e10ab54d7912d SHA256 434643810dde2d6afc8d712563afbcd588d49cdb6bec7edec9545d2c7e375ee8 -DIST gst-plugins-base-0.10.32.tar.bz2 2720103 RMD160 b267e3138e40e3646efed0baa662d40775eca1ea SHA1 c1c149272b7ab6cbe5f648532f74525c6541eea5 SHA256 e9aabfac83f6480896da0686e9c911989f896fbad634821b7771ed84a446172b -EBUILD gst-plugins-base-0.10.32_p20110127.ebuild 3386 RMD160 366819facffe23ed35617ff106ac81411824103c SHA1 2efdfad7c81709078ff142410917d092b34ad112 SHA256 8fa605d70e03f9f52680a5d46334a9ad9cc055e84578fb440ddc74174670fa64 diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0001-add-rowstride-support-to-video-utility-functions.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0001-add-rowstride-support-to-video-utility-functions.patch deleted file mode 100644 index 6f25b71..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0001-add-rowstride-support-to-video-utility-functions.patch +++ /dev/null @@ -1,536 +0,0 @@ -From 481cda8686336999ccccbdbf239bcbd520bcdfc7 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Thu, 30 Jul 2009 14:50:05 -0500 -Subject: [PATCH 01/24] add rowstride support to video utility functions - ---- - gst-libs/gst/video/gstvideofilter.c | 8 +- - gst-libs/gst/video/video.c | 244 ++++++++++++++++++++++++++++------- - gst-libs/gst/video/video.h | 27 +++-- - 3 files changed, 220 insertions(+), 59 deletions(-) - -diff --git a/gst-libs/gst/video/gstvideofilter.c b/gst-libs/gst/video/gstvideofilter.c -index 2d08a60..6b2d7b7 100644 ---- a/gst-libs/gst/video/gstvideofilter.c -+++ b/gst-libs/gst/video/gstvideofilter.c -@@ -21,7 +21,7 @@ - /** - * SECTION:gstvideofilter - * @short_description: Base class for video filters -- * -+ * - * <refsect2> - * <para> - * Provides useful functions and a base class for video filters. -@@ -78,14 +78,14 @@ gst_video_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, - guint * size) - { - GstVideoFormat fmt; -- gint width, height; -+ gint width, height, rowstride; - -- if (!gst_video_format_parse_caps (caps, &fmt, &width, &height)) { -+ if (!gst_video_format_parse_caps_strided (caps, &fmt, &width, &height, &rowstride)) { - GST_WARNING_OBJECT (btrans, "Failed to parse caps %" GST_PTR_FORMAT, caps); - return FALSE; - } - -- *size = gst_video_format_get_size (fmt, width, height); -+ *size = gst_video_format_get_size_strided (fmt, width, height, rowstride); - - GST_DEBUG_OBJECT (btrans, "Returning size %u bytes for caps %" - GST_PTR_FORMAT, *size, caps); -diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c -index d9fa50b..24f1ac8 100644 ---- a/gst-libs/gst/video/video.c -+++ b/gst-libs/gst/video/video.c -@@ -31,7 +31,7 @@ - * - * <refsect2> - * <para> -- * This library contains some helper functions and includes the -+ * This library contains some helper functions and includes the - * videosink and videofilter base classes. - * </para> - * </refsect2> -@@ -53,7 +53,7 @@ static GstVideoFormat gst_video_format_from_rgb16_masks (int red_mask, - * - * A convenience function to retrieve a GValue holding the framerate - * from the caps on a pad. -- * -+ * - * The pad needs to have negotiated caps containing a framerate property. - * - * Returns: NULL if the pad has no configured caps or the configured caps -@@ -106,7 +106,7 @@ gst_video_frame_rate (GstPad * pad) - * - * Inspect the caps of the provided pad and retrieve the width and height of - * the video frames it is configured for. -- * -+ * - * The pad needs to have negotiated caps containing width and height properties. - * - * Returns: TRUE if the width and height could be retrieved. -@@ -158,13 +158,13 @@ gst_video_get_size (GstPad * pad, gint * width, gint * height) - * @display_par_n: Numerator of the pixel aspect ratio of the display device - * @display_par_d: Denominator of the pixel aspect ratio of the display device - * -- * Given the Pixel Aspect Ratio and size of an input video frame, and the -- * pixel aspect ratio of the intended display device, calculates the actual -+ * Given the Pixel Aspect Ratio and size of an input video frame, and the -+ * pixel aspect ratio of the intended display device, calculates the actual - * display ratio the video will be rendered with. - * -- * Returns: A boolean indicating success and a calculated Display Ratio in the -- * dar_n and dar_d parameters. -- * The return value is FALSE in the case of integer overflow or other error. -+ * Returns: A boolean indicating success and a calculated Display Ratio in the -+ * dar_n and dar_d parameters. -+ * The return value is FALSE in the case of integer overflow or other error. - * - * Since: 0.10.7 - */ -@@ -308,28 +308,15 @@ gst_video_parse_caps_chroma_site (GstCaps * caps) - } - - /** -- * gst_video_format_parse_caps: -- * @caps: the #GstCaps to parse -- * @format: the #GstVideoFormat of the video represented by @caps (output) -- * @width: the width of the video represented by @caps, may be NULL (output) -- * @height: the height of the video represented by @caps, may be NULL (output) -- * -- * Determines the #GstVideoFormat of @caps and places it in the location -- * pointed to by @format. Extracts the size of the video and places it -- * in the location pointed to by @width and @height. If @caps does not -- * represent one of the raw video formats listed in #GstVideoFormat, the -- * function will fail and return FALSE. -- * -- * Since: 0.10.16 -- * -- * Returns: TRUE if @caps was parsed correctly. -+ * see gst_video_format_parse_caps_strided and gst_video_format_parse_caps - */ --gboolean --gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format, -- int *width, int *height) -+static gboolean -+parse_caps (GstCaps * caps, GstVideoFormat * format, gint *width, gint *height, -+ gboolean stride_ok, gint *rowstride) - { - GstStructure *structure; - gboolean ok = TRUE; -+ gboolean strided = FALSE; - - if (!gst_caps_is_fixed (caps)) - return FALSE; -@@ -337,7 +324,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format, - structure = gst_caps_get_structure (caps, 0); - - if (format) { -- if (gst_structure_has_name (structure, "video/x-raw-yuv")) { -+ if (gst_structure_has_name (structure, "video/x-raw-yuv") || -+ (stride_ok && -+ gst_structure_has_name (structure, "video/x-raw-yuv-strided") && -+ (strided=TRUE) /* single '=' intentional */)) { - guint32 fourcc; - - ok &= gst_structure_get_fourcc (structure, "format", &fourcc); -@@ -346,7 +336,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format, - if (*format == GST_VIDEO_FORMAT_UNKNOWN) { - ok = FALSE; - } -- } else if (gst_structure_has_name (structure, "video/x-raw-rgb")) { -+ } else if (gst_structure_has_name (structure, "video/x-raw-rgb") || -+ (stride_ok && -+ gst_structure_has_name (structure, "video/x-raw-rgb-strided") && -+ (strided=TRUE) /* single '=' intentional */)) { - int depth; - int bpp; - int endianness = 0; -@@ -423,6 +416,10 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format, - } - } - -+ /* note: should we require that the caps have these fields, even if -+ * the caller does not particularly request them?? -+ */ -+ - if (width) { - ok &= gst_structure_get_int (structure, "width", width); - } -@@ -431,11 +428,70 @@ gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format, - ok &= gst_structure_get_int (structure, "height", height); - } - -+ if (rowstride) { -+ if (strided) { -+ ok &= gst_structure_get_int (structure, "rowstride", rowstride); -+ } else { -+ *rowstride = 0; /* not a strided format */ -+ } -+ } -+ - return ok; - } - - - /** -+ * gst_video_format_parse_caps_strided: -+ * @caps: the #GstCaps to parse -+ * @format: the #GstVideoFormat of the video represented by @caps (output) -+ * @width: the width of the video represented by @caps, may be NULL (output) -+ * @height: the height of the video represented by @caps, may be NULL (output) -+ * @rowstride: the rowstride (in bytes) represented by @caps, or 0 if there -+ * is no rowstride, may be NULL (output) -+ * -+ * Determines the #GstVideoFormat of @caps and places it in the location -+ * pointed to by @format. Extracts the size of the video and places it -+ * in the location pointed to by @width and @height. Extracts the row- -+ * stride and places it in the location pointed to by @rowstride. If -+ * @caps does not represent one of the raw video formats listed in -+ * #GstVideoFormat, the function will fail and return FALSE. -+ * -+ * Since: ??? -+ * -+ * Returns: TRUE if @caps was parsed correctly. -+ */ -+gboolean -+gst_video_format_parse_caps_strided (GstCaps * caps, GstVideoFormat * format, -+ int *width, int *height, int *rowstride) -+{ -+ return parse_caps (caps, format, width, height, TRUE, rowstride); -+} -+ -+/** -+ * gst_video_format_parse_caps: -+ * @caps: the #GstCaps to parse -+ * @format: the #GstVideoFormat of the video represented by @caps (output) -+ * @width: the width of the video represented by @caps, may be NULL (output) -+ * @height: the height of the video represented by @caps, may be NULL (output) -+ * -+ * Determines the #GstVideoFormat of @caps and places it in the location -+ * pointed to by @format. Extracts the size of the video and places it -+ * in the location pointed to by @width and @height. If @caps does not -+ * represent one of the raw video formats listed in #GstVideoFormat, the -+ * function will fail and return FALSE. -+ * -+ * Since: 0.10.16 -+ * -+ * Returns: TRUE if @caps was parsed correctly. -+ */ -+gboolean -+gst_video_format_parse_caps (GstCaps * caps, GstVideoFormat * format, -+ int *width, int *height) -+{ -+ return parse_caps (caps, format, width, height, FALSE, NULL); -+} -+ -+/** - * gst_video_parse_caps_framerate: - * @caps: pointer to a #GstCaps instance - * @fps_n: pointer to integer to hold numerator of frame rate (output) -@@ -534,10 +590,11 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, - } - - /** -- * gst_video_format_new_caps: -+ * gst_video_format_new_caps_strided: - * @format: the #GstVideoFormat describing the raw video format - * @width: width of video - * @height: height of video -+ * @rowstride: the rowstride (in bytes), or 0 if no rowstride - * @framerate_n: numerator of frame rate - * @framerate_d: denominator of frame rate - * @par_n: numerator of pixel aspect ratio -@@ -545,26 +602,29 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, - * - * Creates a new #GstCaps object based on the parameters provided. - * -- * Since: 0.10.16 -+ * Since: ??? - * - * Returns: a new #GstCaps object, or NULL if there was an error - */ - GstCaps * --gst_video_format_new_caps (GstVideoFormat format, int width, -- int height, int framerate_n, int framerate_d, int par_n, int par_d) -+gst_video_format_new_caps_strided (GstVideoFormat format, -+ int width, int height, int rowstride, -+ int framerate_n, int framerate_d, int par_n, int par_d) - { -+ GstCaps *caps = NULL; -+ - g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, NULL); - g_return_val_if_fail (width > 0 && height > 0, NULL); - - if (gst_video_format_is_yuv (format)) { -- return gst_caps_new_simple ("video/x-raw-yuv", -+ caps = gst_caps_new_simple ( -+ rowstride ? "video/x-raw-yuv-strided" : "video/x-raw-yuv", - "format", GST_TYPE_FOURCC, gst_video_format_to_fourcc (format), - "width", G_TYPE_INT, width, - "height", G_TYPE_INT, height, - "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d, - "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL); -- } -- if (gst_video_format_is_rgb (format)) { -+ } else if (gst_video_format_is_rgb (format)) { - GstCaps *caps; - int red_mask = 0; - int blue_mask = 0; -@@ -663,7 +723,8 @@ gst_video_format_new_caps (GstVideoFormat format, int width, - return NULL; - } - -- caps = gst_caps_new_simple ("video/x-raw-rgb", -+ caps = gst_caps_new_simple ( -+ rowstride ? "video/x-raw-rgb-strided" : "video/x-raw-rgb", - "bpp", G_TYPE_INT, bpp, - "depth", G_TYPE_INT, depth, - "width", G_TYPE_INT, width, -@@ -685,11 +746,7 @@ gst_video_format_new_caps (GstVideoFormat format, int width, - width, height)); - gst_caps_set_simple (caps, "alpha_mask", G_TYPE_INT, alpha_mask, NULL); - } -- return caps; -- } -- -- if (gst_video_format_is_gray (format)) { -- GstCaps *caps; -+ } else if (gst_video_format_is_gray (format)) { - int bpp; - int depth; - int endianness; -@@ -730,11 +787,39 @@ gst_video_format_new_caps (GstVideoFormat format, int width, - "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d, - "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL); - } -+ } else { -+ return NULL; -+ } - -- return caps; -+ if (rowstride) { -+ gst_caps_set_simple (caps, "rowstride", G_TYPE_INT, rowstride, NULL); - } - -- return NULL; -+ return caps; -+} -+ -+/** -+ * gst_video_format_new_caps: -+ * @format: the #GstVideoFormat describing the raw video format -+ * @width: width of video -+ * @height: height of video -+ * @framerate_n: numerator of frame rate -+ * @framerate_d: denominator of frame rate -+ * @par_n: numerator of pixel aspect ratio -+ * @par_d: denominator of pixel aspect ratio -+ * -+ * Creates a new #GstCaps object based on the parameters provided. -+ * -+ * Since: 0.10.16 -+ * -+ * Returns: a new #GstCaps object, or NULL if there was an error -+ */ -+GstCaps * -+gst_video_format_new_caps (GstVideoFormat format, int width, int height, -+ int framerate_n, int framerate_d, int par_n, int par_d) -+{ -+ return gst_video_format_new_caps_strided (format, width, height, 0, -+ framerate_n, framerate_d, par_n, par_d); - } - - /** -@@ -874,7 +959,7 @@ gst_video_format_to_fourcc (GstVideoFormat format) - * @blue_mask: blue bit mask - * - * Converts red, green, blue bit masks into the corresponding -- * #GstVideoFormat. -+ * #GstVideoFormat. - * - * Since: 0.10.16 - * -@@ -1107,7 +1192,7 @@ gst_video_format_is_gray (GstVideoFormat format) - /** - * gst_video_format_has_alpha: - * @format: a #GstVideoFormat -- * -+ * - * Returns TRUE or FALSE depending on if the video format provides an - * alpha channel. - * -@@ -1877,6 +1962,75 @@ gst_video_format_get_size (GstVideoFormat format, int width, int height) - } - - /** -+ * gst_video_format_get_size_strided: -+ * @format: a #GstVideoFormat -+ * @width: the width of video (in pixels) -+ * @height: the height of video (in pixels) -+ * @rowstride: the rowstride (in bytes), or 0 if no rowstride (in which -+ * case the returned value is same as #gst_video_format_get_size()) -+ * -+ * Calculates the total number of bytes in the raw video format, for a buffer -+ * which may have a rowstride in bytes -+ * -+ * Since: ??? -+ * -+ * Returns: size (in bytes) of raw video format -+ */ -+int -+gst_video_format_get_size_strided (GstVideoFormat format, -+ int width, int height, int rowstride) -+{ -+ if(!rowstride) -+ return gst_video_format_get_size (format, width, height); -+ -+ g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, 0); -+ g_return_val_if_fail (width > 0 && height > 0, 0); -+ -+ switch (format) { -+ /* all packed formats have the same calculation, ie. rowstride * height -+ */ -+ case GST_VIDEO_FORMAT_RGBx: -+ case GST_VIDEO_FORMAT_BGRx: -+ case GST_VIDEO_FORMAT_xRGB: -+ case GST_VIDEO_FORMAT_xBGR: -+ case GST_VIDEO_FORMAT_RGBA: -+ case GST_VIDEO_FORMAT_BGRA: -+ case GST_VIDEO_FORMAT_ARGB: -+ case GST_VIDEO_FORMAT_ABGR: -+ case GST_VIDEO_FORMAT_RGB16: -+ case GST_VIDEO_FORMAT_BGR16: -+ case GST_VIDEO_FORMAT_RGB15: -+ case GST_VIDEO_FORMAT_BGR15: -+ case GST_VIDEO_FORMAT_RGB: -+ case GST_VIDEO_FORMAT_BGR: -+ case GST_VIDEO_FORMAT_YUY2: -+ case GST_VIDEO_FORMAT_YVYU: -+ case GST_VIDEO_FORMAT_UYVY: -+ case GST_VIDEO_FORMAT_AYUV: -+ case GST_VIDEO_FORMAT_v210: -+ case GST_VIDEO_FORMAT_v216: -+ return GST_ROUND_UP_4 (rowstride * height); -+ -+ /* these planar formats have 2x sub-sampling in the vertical direction, -+ * so U/V have half as many rows as Y: -+ */ -+ case GST_VIDEO_FORMAT_I420: -+ case GST_VIDEO_FORMAT_YV12: -+ return GST_ROUND_UP_4 (2 * rowstride * height); -+ -+ /* these planar formats have no sub-sampling in the vertical direction, -+ * so each plane has 'height' number of rows -+ */ -+ case GST_VIDEO_FORMAT_Y41B: -+ case GST_VIDEO_FORMAT_Y42B: -+ case GST_VIDEO_FORMAT_Y444: -+ return GST_ROUND_UP_4 (3 * rowstride * height); -+ default: -+ return 0; -+ } -+} -+ -+/** - * gst_video_format_convert: - * @format: a #GstVideoFormat - * @width: the width of video -diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h -index 96c5a85..a6a2293 100644 ---- a/gst-libs/gst/video/video.h -+++ b/gst-libs/gst/video/video.h -@@ -33,7 +33,7 @@ G_BEGIN_DECLS - * @GST_VIDEO_FORMAT_I420: planar 4:2:0 YUV - * @GST_VIDEO_FORMAT_YV12: planar 4:2:0 YVU (like I420 but UV planes swapped) - * @GST_VIDEO_FORMAT_YUY2: packed 4:2:2 YUV (Y0-U0-Y1-V0 Y2-U2-Y3-V2 Y4 ...) -- * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) -+ * @GST_VIDEO_FORMAT_UYVY: packed 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) - * @GST_VIDEO_FORMAT_AYUV: packed 4:4:4 YUV with alpha channel (A0-Y0-U0-V0 ...) - * @GST_VIDEO_FORMAT_RGBx: sparse rgb packed into 32 bit, space last - * @GST_VIDEO_FORMAT_BGRx: sparse reverse rgb packed into 32 bit, space last -@@ -245,13 +245,13 @@ typedef enum { - - #define GST_VIDEO_CAPS_RGBx \ - __GST_VIDEO_CAPS_MAKE_32 (1, 2, 3) -- -+ - #define GST_VIDEO_CAPS_xRGB \ - __GST_VIDEO_CAPS_MAKE_32 (2, 3, 4) -- -+ - #define GST_VIDEO_CAPS_BGRx \ - __GST_VIDEO_CAPS_MAKE_32 (3, 2, 1) -- -+ - #define GST_VIDEO_CAPS_xBGR \ - __GST_VIDEO_CAPS_MAKE_32 (4, 3, 2) - -@@ -259,13 +259,13 @@ typedef enum { - - #define GST_VIDEO_CAPS_RGBA \ - __GST_VIDEO_CAPS_MAKE_32A (1, 2, 3, 4) -- -+ - #define GST_VIDEO_CAPS_ARGB \ - __GST_VIDEO_CAPS_MAKE_32A (2, 3, 4, 1) -- -+ - #define GST_VIDEO_CAPS_BGRA \ - __GST_VIDEO_CAPS_MAKE_32A (3, 2, 1, 4) -- -+ - #define GST_VIDEO_CAPS_ABGR \ - __GST_VIDEO_CAPS_MAKE_32A (4, 3, 2, 1) - -@@ -281,7 +281,7 @@ typedef enum { - #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \ - GST_VIDEO_CAPS_xRGB - #endif -- -+ - /* 15/16 bit */ - - #define GST_VIDEO_CAPS_RGB_16 \ -@@ -395,13 +395,15 @@ gboolean gst_video_get_size (GstPad *pad, - gint *height); - - gboolean gst_video_calculate_display_ratio (guint *dar_n, guint *dar_d, -- guint video_width, guint video_height, -- guint video_par_n, guint video_par_d, -+ guint video_width, guint video_height, -+ guint video_par_n, guint video_par_d, - guint display_par_n, guint display_par_d); - - gboolean gst_video_format_parse_caps (GstCaps *caps, GstVideoFormat *format, - int *width, int *height); - gboolean gst_video_format_parse_caps_interlaced (GstCaps *caps, gboolean *interlaced); -+gboolean gst_video_format_parse_caps_strided (GstCaps * caps, GstVideoFormat * format, -+ int *width, int *height, int *rowstride); - gboolean gst_video_parse_caps_framerate (GstCaps *caps, - int *fps_n, int *fps_d); - gboolean gst_video_parse_caps_pixel_aspect_ratio (GstCaps *caps, -@@ -415,6 +417,9 @@ GstCaps * gst_video_format_new_caps (GstVideoFormat format, - GstCaps * gst_video_format_new_caps_interlaced (GstVideoFormat format, - int width, int height, int framerate_n, int framerate_d, - int par_n, int par_d, gboolean interlaced); -+GstCaps * gst_video_format_new_caps_strided (GstVideoFormat format, -+ int width, int height, int rowstride, -+ int framerate_n, int framerate_d, int par_n, int par_d); - GstVideoFormat gst_video_format_from_fourcc (guint32 fourcc); - guint32 gst_video_format_to_fourcc (GstVideoFormat format); - gboolean gst_video_format_is_rgb (GstVideoFormat format); -@@ -431,6 +436,8 @@ int gst_video_format_get_component_height (GstVideoFormat format, int component, - int gst_video_format_get_component_offset (GstVideoFormat format, int component, - int width, int height); - int gst_video_format_get_size (GstVideoFormat format, int width, int height); -+int gst_video_format_get_size_strided (GstVideoFormat format, -+ int width, int height, int rowstride); - gboolean gst_video_format_convert (GstVideoFormat format, int width, int height, - int fps_n, int fps_d, - GstFormat src_format, gint64 src_value, --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0002-stridetransform-skeletal-implementation-of-stridetra.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0002-stridetransform-skeletal-implementation-of-stridetra.patch deleted file mode 100644 index 6e88172..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0002-stridetransform-skeletal-implementation-of-stridetra.patch +++ /dev/null @@ -1,368 +0,0 @@ -From 9820616aad713a23aa9d0e2afe44835d9e9278e5 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Thu, 30 Jul 2009 20:41:18 -0500 -Subject: [PATCH 02/24] stridetransform: skeletal implementation of stridetransform element - ---- - configure.ac | 2 + - gst/stride/Makefile.am | 15 ++++ - gst/stride/gststridetransform.c | 178 +++++++++++++++++++++++++++++++++++++++ - gst/stride/gststridetransform.h | 66 ++++++++++++++ - gst/stride/plugin.c | 45 ++++++++++ - 5 files changed, 306 insertions(+), 0 deletions(-) - create mode 100644 gst/stride/Makefile.am - create mode 100644 gst/stride/gststridetransform.c - create mode 100644 gst/stride/gststridetransform.h - create mode 100644 gst/stride/plugin.c - -diff --git a/configure.ac b/configure.ac -index 3325abc..af6cd52 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -427,6 +427,7 @@ AG_GST_CHECK_PLUGIN(ffmpegcolorspace) - AG_GST_CHECK_PLUGIN(gdp) - AG_GST_CHECK_PLUGIN(playback) - AG_GST_CHECK_PLUGIN(audioresample) -+AG_GST_CHECK_PLUGIN(stride) - AG_GST_CHECK_PLUGIN(subparse) - AG_GST_CHECK_PLUGIN(tcp) - AG_GST_CHECK_PLUGIN(typefind) -@@ -925,6 +926,7 @@ gst/ffmpegcolorspace/Makefile - gst/gdp/Makefile - gst/playback/Makefile - gst/audioresample/Makefile -+gst/stride/Makefile - gst/subparse/Makefile - gst/tcp/Makefile - gst/typefind/Makefile -diff --git a/gst/stride/Makefile.am b/gst/stride/Makefile.am -new file mode 100644 -index 0000000..1adc197 ---- /dev/null -+++ b/gst/stride/Makefile.am -@@ -0,0 +1,15 @@ -+plugin_LTLIBRARIES = libgststridetransform.la -+ -+libgststridetransform_la_SOURCES = \ -+ gststridetransform.c \ -+ plugin.c -+ -+libgststridetransform_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) -+libgststridetransform_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -+libgststridetransform_la_LIBADD = \ -+ $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_MAJORMINOR@.la \ -+ $(GST_BASE_LIBS) $(GST_LIBS) $(LIBM) -+libgststridetransform_la_LIBTOOLFLAGS = --tag=disable-static -+ -+noinst_HEADERS = \ -+ gststridetransform.h -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -new file mode 100644 -index 0000000..21f2d6e ---- /dev/null -+++ b/gst/stride/gststridetransform.c -@@ -0,0 +1,178 @@ -+/* GStreamer -+ * -+ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/ -+ * -+ * Description: V4L2 sink element -+ * Created on: Jul 30, 2009 -+ * Author: Rob Clark <rob@ti.com> -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 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 -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ * Boston, MA 02111-1307, USA. -+ */ -+ -+ -+/** -+ * SECTION:element-stridetransform -+ * -+ * stridetransform can be used to convert between video buffers -+ * with and without stride, or between buffers with differing -+ * stride -+ * -+ * <refsect2> -+ * <title>Example launch lines</title> -+ * |[ -+ * gst-launch ???? TODO -+ * ]| This pipeline ???? TODO -+ * </refsect2> -+ */ -+ -+ -+#ifdef HAVE_CONFIG_H -+#include <config.h> -+#endif -+ -+#include "gststridetransform.h" -+#include "gst/gst-i18n-plugin.h" -+ -+ -+static const GstElementDetails stridetransform_details = -+GST_ELEMENT_DETAILS ("Stride transform", -+ "Filter/Converter/Video", -+ "Convert between video buffers with and without stride, or with differing stride", -+ "Rob Clark <rob@ti.com>,"); -+ -+GST_DEBUG_CATEGORY (stridetransform_debug); -+#define GST_CAT_DEFAULT stridetransform_debug -+ -+/* type functions */ -+static void gst_stride_transform_dispose (GObject * obj); -+ -+/* GstBaseTransform functions */ -+static gboolean gst_stride_transform_get_unit_size (GstBaseTransform * base, -+ GstCaps * caps, guint * size); -+static GstCaps *gst_stride_transform_transform_caps (GstBaseTransform * base, -+ GstPadDirection direction, GstCaps * caps); -+static void gst_stride_transform_fixate_caps (GstBaseTransform * base, -+ GstPadDirection direction, GstCaps * caps, GstCaps * othercaps); -+static gboolean gst_stride_transform_set_caps (GstBaseTransform * base, -+ GstCaps * incaps, GstCaps * outcaps); -+static GstFlowReturn gst_stride_transform_transform (GstBaseTransform * base, -+ GstBuffer * inbuf, GstBuffer * outbuf); -+static GstFlowReturn gst_stride_transform_transform_ip (GstBaseTransform * base, -+ GstBuffer * buf); -+ -+GST_BOILERPLATE (GstStrideTransform, gst_stride_transform, GstVideoFilter, GST_TYPE_VIDEO_FILTER); -+ -+ -+static void -+gst_stride_transform_base_init (gpointer g_class) -+{ -+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class); -+ -+ GST_DEBUG_CATEGORY_INIT (stridetransform_debug, "stride", 0, "stride transform element"); -+ -+ gst_element_class_set_details (gstelement_class, &stridetransform_details); -+} -+ -+static void -+gst_stride_transform_class_init (GstStrideTransformClass * klass) -+{ -+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); -+ GstBaseTransformClass *basetransform_class = GST_BASE_TRANSFORM_CLASS (klass); -+ -+ gobject_class->dispose = gst_stride_transform_dispose; -+ -+ basetransform_class->get_unit_size = -+ GST_DEBUG_FUNCPTR (gst_stride_transform_get_unit_size); -+ basetransform_class->transform_caps = -+ GST_DEBUG_FUNCPTR (gst_stride_transform_transform_caps); -+ basetransform_class->fixate_caps = -+ GST_DEBUG_FUNCPTR (gst_stride_transform_fixate_caps); -+ basetransform_class->set_caps = -+ GST_DEBUG_FUNCPTR (gst_stride_transform_set_caps); -+ basetransform_class->transform_ip = -+ GST_DEBUG_FUNCPTR (gst_stride_transform_transform_ip); -+ basetransform_class->transform = -+ GST_DEBUG_FUNCPTR (gst_stride_transform_transform); -+ -+ basetransform_class->passthrough_on_same_caps = TRUE; -+} -+ -+static void -+gst_stride_transform_init (GstStrideTransform * self, GstStrideTransformClass * klass) -+{ -+ GST_DEBUG_OBJECT (self, "not implemented"); -+} -+ -+ -+static void -+gst_stride_transform_dispose (GObject * object) -+{ -+ GstStrideTransform *self = GST_STRIDE_TRANSFORM (object); -+ GST_DEBUG_OBJECT (self, "not implemented"); -+ G_OBJECT_CLASS (parent_class)->dispose (object); -+} -+ -+static gboolean -+gst_stride_transform_get_unit_size (GstBaseTransform * base, -+ GstCaps * caps, guint * size) -+{ -+ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -+ GST_DEBUG_OBJECT (self, "not implemented"); -+ return FALSE; -+} -+ -+static GstCaps * -+gst_stride_transform_transform_caps (GstBaseTransform * base, -+ GstPadDirection direction, GstCaps * caps) -+{ -+ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -+ GST_DEBUG_OBJECT (self, "not implemented"); -+ return NULL; -+} -+ -+static void -+gst_stride_transform_fixate_caps (GstBaseTransform * base, -+ GstPadDirection direction, GstCaps * caps, GstCaps * othercaps) -+{ -+ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -+ GST_DEBUG_OBJECT (self, "not implemented"); -+} -+ -+static gboolean -+gst_stride_transform_set_caps (GstBaseTransform * base, -+ GstCaps * incaps, GstCaps * outcaps) -+{ -+ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -+ GST_DEBUG_OBJECT (self, "not implemented"); -+ return FALSE; -+} -+ -+static GstFlowReturn gst_stride_transform_transform (GstBaseTransform * base, -+ GstBuffer * inbuf, GstBuffer * outbuf) -+{ -+ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -+ GST_DEBUG_OBJECT (self, "not implemented"); -+ return GST_FLOW_ERROR; -+} -+ -+static GstFlowReturn -+gst_stride_transform_transform_ip (GstBaseTransform * base, -+ GstBuffer * buf) -+{ -+ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -+ GST_DEBUG_OBJECT (self, "not implemented"); -+ return GST_FLOW_ERROR; -+} -diff --git a/gst/stride/gststridetransform.h b/gst/stride/gststridetransform.h -new file mode 100644 -index 0000000..b4f7d59 ---- /dev/null -+++ b/gst/stride/gststridetransform.h -@@ -0,0 +1,66 @@ -+/* GStreamer -+ * -+ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/ -+ * -+ * Description: V4L2 sink element -+ * Created on: Jul 2, 2009 -+ * Author: Rob Clark <rob@ti.com> -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 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 -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ * Boston, MA 02111-1307, USA. -+ */ -+ -+#ifndef __GSTSTRIDETRANSFORM_H__ -+#define __GSTSTRIDETRANSFORM_H__ -+ -+ -+#include <gst/video/gstvideofilter.h> -+ -+G_BEGIN_DECLS -+ -+#define GST_TYPE_STRIDE_TRANSFORM \ -+ (gst_stride_transform_get_type()) -+#define GST_STRIDE_TRANSFORM(obj) \ -+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_STRIDE_TRANSFORM,GstStrideTransform)) -+#define GST_STRIDE_TRANSFORM_CLASS(klass) \ -+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_STRIDE_TRANSFORM,GstStrideTransformClass)) -+#define GST_IS_STRIDE_TRANSFORM(obj) \ -+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_STRIDE_TRANSFORM)) -+#define GST_IS_STRIDE_TRANSFORM_CLASS(klass) \ -+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_STRIDE_TRANSFORM)) -+ -+typedef struct _GstStrideTransform GstStrideTransform; -+typedef struct _GstStrideTransformClass GstStrideTransformClass; -+ -+/** -+ * GstStrideTransform: -+ * -+ * Opaque datastructure. -+ */ -+struct _GstStrideTransform { -+ GstVideoFilter videofilter; -+ -+}; -+ -+struct _GstStrideTransformClass { -+ GstVideoFilterClass parent_class; -+}; -+ -+GType gst_stride_transform_get_type (void); -+ -+G_END_DECLS -+ -+ -+#endif /* __GSTSTRIDETRANSFORM_H__ */ -diff --git a/gst/stride/plugin.c b/gst/stride/plugin.c -new file mode 100644 -index 0000000..7672bdc ---- /dev/null -+++ b/gst/stride/plugin.c -@@ -0,0 +1,45 @@ -+/* GStreamer -+ * -+ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/ -+ * -+ * Description: V4L2 sink element -+ * Created on: Jul 30, 2009 -+ * Author: Rob Clark <rob@ti.com> -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 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 -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ * Boston, MA 02111-1307, USA. -+ */ -+ -+#ifdef HAVE_CONFIG_H -+#include "config.h" -+#endif -+ -+#include "gststridetransform.h" -+ -+static gboolean -+plugin_init (GstPlugin * plugin) -+{ -+ if (!gst_element_register (plugin, "stridetransform", -+ GST_RANK_PRIMARY, gst_stride_transform_get_type ())) -+ return FALSE; -+ -+ return TRUE; -+} -+ -+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, -+ GST_VERSION_MINOR, -+ "stridetransform", -+ "Convert video from strided to non-strided, or between different row-strides", -+ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0003-stridetransform-implement-caps-negotiation-and-relat.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0003-stridetransform-implement-caps-negotiation-and-relat.patch deleted file mode 100644 index faf97a1..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0003-stridetransform-implement-caps-negotiation-and-relat.patch +++ /dev/null @@ -1,379 +0,0 @@ -From c235770f9e1c73dc75d6873166bc1ef69770a6c1 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 31 Jul 2009 16:31:42 -0500 -Subject: [PATCH 03/24] stridetransform: implement caps negotiation and related parts - -now all that is left is to implement the actual transform functions ---- - gst-libs/gst/video/video.h | 10 ++ - gst/stride/gststridetransform.c | 190 ++++++++++++++++++++++++++++++--------- - gst/stride/gststridetransform.h | 38 ++++++++ - 3 files changed, 196 insertions(+), 42 deletions(-) - -diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h -index a6a2293..5bac21f 100644 ---- a/gst-libs/gst/video/video.h -+++ b/gst-libs/gst/video/video.h -@@ -356,6 +356,16 @@ typedef enum { - "height = " GST_VIDEO_SIZE_RANGE ", " \ - "framerate = " GST_VIDEO_FPS_RANGE - -+ -+#define GST_VIDEO_CAPS_YUV_STRIDED(fourcc, rowstride) \ -+ GST_VIDEO_CAPS_YUV(fourcc) "; " \ -+ "video/x-raw-yuv-strided, " \ -+ "format = (fourcc) " fourcc ", " \ -+ "rowstride = (int) " rowstride ", " \ -+ "width = " GST_VIDEO_SIZE_RANGE ", " \ -+ "height = " GST_VIDEO_SIZE_RANGE ", " \ -+ "framerate = " GST_VIDEO_FPS_RANGE -+ - /* buffer flags */ - - /** -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index 21f2d6e..e31bf11 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -33,7 +33,10 @@ - * <refsect2> - * <title>Example launch lines</title> - * |[ -- * gst-launch ???? TODO -+ * gst-launch videotestsrc ! video/x-raw-yuv,format=(fourcc)YUY2,width=320,height=240,framerate=30/1 ! -+ * stridetransform ! video/x-raw-yuv-strided,format=(fourcc)YUY2,width=320,height=240,rowstride=700,framerate=30/1 ! -+ * stridetransform ! video/x-raw-yuv,format=(fourcc)YUY2,width=320,height=240,framerate=30/1 ! -+ * v4l2sink - * ]| This pipeline ???? TODO - * </refsect2> - */ -@@ -43,8 +46,11 @@ - #include <config.h> - #endif - --#include "gststridetransform.h" -+#include <string.h> -+#include <gst/video/video.h> -+ - #include "gst/gst-i18n-plugin.h" -+#include "gststridetransform.h" - - - static const GstElementDetails stridetransform_details = -@@ -53,25 +59,44 @@ GST_ELEMENT_DETAILS ("Stride transform", - "Convert between video buffers with and without stride, or with differing stride", - "Rob Clark <rob@ti.com>,"); - -+ -+/* TODO: add rgb formats too! */ -+#define SUPPORTED_CAPS \ -+ GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2 }", "[ 0, max ]") -+ -+ -+static GstStaticPadTemplate src_template = -+GST_STATIC_PAD_TEMPLATE ("src", -+ GST_PAD_SRC, -+ GST_PAD_ALWAYS, -+ GST_STATIC_CAPS (SUPPORTED_CAPS) -+ ); -+ -+static GstStaticPadTemplate sink_template = -+GST_STATIC_PAD_TEMPLATE ("sink", -+ GST_PAD_SINK, -+ GST_PAD_ALWAYS, -+ GST_STATIC_CAPS (SUPPORTED_CAPS) -+ ); -+ -+ - GST_DEBUG_CATEGORY (stridetransform_debug); - #define GST_CAT_DEFAULT stridetransform_debug - - /* type functions */ --static void gst_stride_transform_dispose (GObject * obj); -+static void gst_stride_transform_dispose (GObject *obj); - - /* GstBaseTransform functions */ --static gboolean gst_stride_transform_get_unit_size (GstBaseTransform * base, -- GstCaps * caps, guint * size); --static GstCaps *gst_stride_transform_transform_caps (GstBaseTransform * base, -- GstPadDirection direction, GstCaps * caps); --static void gst_stride_transform_fixate_caps (GstBaseTransform * base, -- GstPadDirection direction, GstCaps * caps, GstCaps * othercaps); --static gboolean gst_stride_transform_set_caps (GstBaseTransform * base, -- GstCaps * incaps, GstCaps * outcaps); --static GstFlowReturn gst_stride_transform_transform (GstBaseTransform * base, -- GstBuffer * inbuf, GstBuffer * outbuf); --static GstFlowReturn gst_stride_transform_transform_ip (GstBaseTransform * base, -- GstBuffer * buf); -+static gboolean gst_stride_transform_get_unit_size (GstBaseTransform *base, -+ GstCaps *caps, guint *size); -+static GstCaps *gst_stride_transform_transform_caps (GstBaseTransform *base, -+ GstPadDirection direction, GstCaps *caps); -+static gboolean gst_stride_transform_set_caps (GstBaseTransform *base, -+ GstCaps *incaps, GstCaps *outcaps); -+static GstFlowReturn gst_stride_transform_transform (GstBaseTransform *base, -+ GstBuffer *inbuf, GstBuffer *outbuf); -+static GstFlowReturn gst_stride_transform_transform_ip (GstBaseTransform *base, -+ GstBuffer *buf); - - GST_BOILERPLATE (GstStrideTransform, gst_stride_transform, GstVideoFilter, GST_TYPE_VIDEO_FILTER); - -@@ -84,10 +109,15 @@ gst_stride_transform_base_init (gpointer g_class) - GST_DEBUG_CATEGORY_INIT (stridetransform_debug, "stride", 0, "stride transform element"); - - gst_element_class_set_details (gstelement_class, &stridetransform_details); -+ -+ gst_element_class_add_pad_template (gstelement_class, -+ gst_static_pad_template_get (&sink_template)); -+ gst_element_class_add_pad_template (gstelement_class, -+ gst_static_pad_template_get (&src_template)); - } - - static void --gst_stride_transform_class_init (GstStrideTransformClass * klass) -+gst_stride_transform_class_init (GstStrideTransformClass *klass) - { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GstBaseTransformClass *basetransform_class = GST_BASE_TRANSFORM_CLASS (klass); -@@ -98,8 +128,6 @@ gst_stride_transform_class_init (GstStrideTransformClass * klass) - GST_DEBUG_FUNCPTR (gst_stride_transform_get_unit_size); - basetransform_class->transform_caps = - GST_DEBUG_FUNCPTR (gst_stride_transform_transform_caps); -- basetransform_class->fixate_caps = -- GST_DEBUG_FUNCPTR (gst_stride_transform_fixate_caps); - basetransform_class->set_caps = - GST_DEBUG_FUNCPTR (gst_stride_transform_set_caps); - basetransform_class->transform_ip = -@@ -111,57 +139,135 @@ gst_stride_transform_class_init (GstStrideTransformClass * klass) - } - - static void --gst_stride_transform_init (GstStrideTransform * self, GstStrideTransformClass * klass) -+gst_stride_transform_init (GstStrideTransform *self, GstStrideTransformClass *klass) - { - GST_DEBUG_OBJECT (self, "not implemented"); - } - - - static void --gst_stride_transform_dispose (GObject * object) -+gst_stride_transform_dispose (GObject *object) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (object); - GST_DEBUG_OBJECT (self, "not implemented"); - G_OBJECT_CLASS (parent_class)->dispose (object); - } - -+/** -+ * figure out the required buffer size based on @caps -+ */ - static gboolean --gst_stride_transform_get_unit_size (GstBaseTransform * base, -- GstCaps * caps, guint * size) -+gst_stride_transform_get_unit_size (GstBaseTransform *base, -+ GstCaps *caps, guint *size) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -- GST_DEBUG_OBJECT (self, "not implemented"); -- return FALSE; -+ GstVideoFormat format; -+ gint width, height, rowstride; -+ -+ g_return_val_if_fail (gst_video_format_parse_caps_strided ( -+ caps, &format, &width, &height, &rowstride), FALSE); -+ -+ *size = gst_video_format_get_size_strided (format, width, height, rowstride); -+ -+ GST_DEBUG_OBJECT (self, -+ "format=%d, width=%d, height=%d, rowstride=%d -> size=%d", -+ format, width, height, rowstride, *size); -+ -+ return TRUE; - } - --static GstCaps * --gst_stride_transform_transform_caps (GstBaseTransform * base, -- GstPadDirection direction, GstCaps * caps) -+ -+/** -+ * helper to add all fields, other than rowstride to @caps, copied from @s. -+ */ -+static void -+add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rowstride) - { -- GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -- GST_DEBUG_OBJECT (self, "not implemented"); -- return NULL; -+ gint idx; -+ GstStructure *new_s = gst_structure_new (name, NULL); -+ -+ if (rowstride) { -+ gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, 1000, NULL); // XXX -+ } -+ -+ idx = gst_structure_n_fields (s) - 1; -+ while (idx >= 0) { -+ const gchar *name = gst_structure_nth_field_name (s, idx); -+ if (strcmp ("rowstride", name)) { -+ const GValue *val = gst_structure_get_value (s, name); -+ gst_structure_set_value (new_s, name, val); -+ } -+ idx--; -+ } -+ -+ gst_caps_merge_structure (caps, new_s); - } - --static void --gst_stride_transform_fixate_caps (GstBaseTransform * base, -- GstPadDirection direction, GstCaps * caps, GstCaps * othercaps) -+ -+/** -+ * we can transform @caps to strided or non-strided caps with otherwise -+ * identical parameters -+ */ -+static GstCaps * -+gst_stride_transform_transform_caps (GstBaseTransform *base, -+ GstPadDirection direction, GstCaps *caps) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -- GST_DEBUG_OBJECT (self, "not implemented"); -+ GstCaps *ret; -+ GstStructure *s; -+ -+ g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), NULL); -+ -+ GST_DEBUG_OBJECT (self, "direction=%d, caps=%p", direction, caps); -+ LOG_CAPS (self, caps); -+ -+ ret = gst_caps_new_empty (); -+ s = gst_caps_get_structure (caps, 0); -+ -+ if (gst_structure_has_name (s, "video/x-raw-yuv") || -+ gst_structure_has_name (s, "video/x-raw-yuv-strided")) { -+ -+ add_all_fields (ret, "video/x-raw-yuv", s, FALSE); -+ add_all_fields (ret, "video/x-raw-yuv-strided", s, TRUE); -+ -+ } else if (gst_structure_has_name (s, "video/x-raw-rgb") || -+ gst_structure_has_name (s, "video/x-raw-rgb-strided")) { -+ -+ add_all_fields (ret, "video/x-raw-rgb", s, FALSE); -+ add_all_fields (ret, "video/x-raw-rgb-strided", s, TRUE); -+ -+ } -+ -+ LOG_CAPS (self, ret); -+ -+ return ret; - } - -+/** -+ * at this point, we have identical fourcc, width, and height for @incaps -+ * and @outcaps.. so we need to extract these to use for transforming, -+ * plus the requested rowstride of the @incaps and @outcaps -+ */ - static gboolean --gst_stride_transform_set_caps (GstBaseTransform * base, -- GstCaps * incaps, GstCaps * outcaps) -+gst_stride_transform_set_caps (GstBaseTransform *base, -+ GstCaps *incaps, GstCaps *outcaps) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -- GST_DEBUG_OBJECT (self, "not implemented"); -- return FALSE; -+ -+ LOG_CAPS (self, incaps); -+ LOG_CAPS (self, outcaps); -+ -+ g_return_val_if_fail (gst_video_format_parse_caps_strided (incaps, -+ &self->format, &self->width, &self->height, &self->in_rowstride), FALSE); -+ g_return_val_if_fail (gst_video_format_parse_caps_strided (outcaps, -+ NULL, NULL, NULL, &self->out_rowstride), FALSE); -+ -+ return TRUE; - } - --static GstFlowReturn gst_stride_transform_transform (GstBaseTransform * base, -- GstBuffer * inbuf, GstBuffer * outbuf) -+static GstFlowReturn -+gst_stride_transform_transform (GstBaseTransform *base, -+ GstBuffer *inbuf, GstBuffer *outbuf) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); - GST_DEBUG_OBJECT (self, "not implemented"); -@@ -169,8 +275,8 @@ static GstFlowReturn gst_stride_transform_transform (GstBaseTransform * base, - } - - static GstFlowReturn --gst_stride_transform_transform_ip (GstBaseTransform * base, -- GstBuffer * buf) -+gst_stride_transform_transform_ip (GstBaseTransform *base, -+ GstBuffer *buf) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); - GST_DEBUG_OBJECT (self, "not implemented"); -diff --git a/gst/stride/gststridetransform.h b/gst/stride/gststridetransform.h -index b4f7d59..d80197f 100644 ---- a/gst/stride/gststridetransform.h -+++ b/gst/stride/gststridetransform.h -@@ -27,6 +27,8 @@ - - - #include <gst/video/gstvideofilter.h> -+#include <gst/video/video.h> -+ - - G_BEGIN_DECLS - -@@ -52,6 +54,11 @@ typedef struct _GstStrideTransformClass GstStrideTransformClass; - struct _GstStrideTransform { - GstVideoFilter videofilter; - -+ /*< private >*/ -+ GstVideoFormat format; -+ gint width, height; -+ gint in_rowstride; -+ gint out_rowstride; - }; - - struct _GstStrideTransformClass { -@@ -63,4 +70,35 @@ GType gst_stride_transform_get_type (void); - G_END_DECLS - - -+ -+ -+/* note: in case this is a build with TTIF logging, we can optimize slightly -+ * and avoid the gst_caps_to_string() in case logging isn't enabled by using -+ * the TTIF_TRACE_ARG_PROCESSOR feature of ttif_trace_fprintf(): -+ */ -+#ifdef GST_LOG_OVER_TTIF -+# define LOG_CAPS(obj, caps) G_STMT_START { \ -+ if (caps) { \ -+ static TTIF_TRACE_ARG_PROCESSOR proc = { \ -+ .convert = (char (*)(void *))gst_caps_to_string, \ -+ .free = (void (*)(char *))g_free \ -+ }; \ -+ GST_DEBUG_OBJECT (obj, "%s: %qs", #caps, &proc, (caps)); \ -+ } else { \ -+ GST_DEBUG_OBJECT (obj, "null"); \ -+ } \ -+ } G_STMT_END -+#else -+# define LOG_CAPS(obj, caps) G_STMT_START { \ -+ if (caps) { \ -+ gchar *capstr = gst_caps_to_string (caps); \ -+ GST_DEBUG_OBJECT (obj, "%s: %s", #caps, capstr); \ -+ g_free (capstr); \ -+ } else { \ -+ GST_DEBUG_OBJECT (obj, "null"); \ -+ } \ -+ } G_STMT_END -+#endif -+ -+ - #endif /* __GSTSTRIDETRANSFORM_H__ */ --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0004-stridetransform-implement-transform-function.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0004-stridetransform-implement-transform-function.patch deleted file mode 100644 index b948c02..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0004-stridetransform-implement-transform-function.patch +++ /dev/null @@ -1,215 +0,0 @@ -From 44d68a183355bce2dd7b6c890f67420ab300e0b4 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 31 Jul 2009 17:39:47 -0500 -Subject: [PATCH 04/24] stridetransform: implement transform function - -Still needed are a few details, like conversion from one stride to another (instead of just strided->nonstrided or visa versa), and support for RGB and more YUV color formats. ---- - gst/stride/gststridetransform.c | 163 +++++++++++++++++++++++++++++++++++++-- - 1 files changed, 157 insertions(+), 6 deletions(-) - -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index e31bf11..a911cd0 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -187,7 +187,7 @@ add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rows - GstStructure *new_s = gst_structure_new (name, NULL); - - if (rowstride) { -- gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, 1000, NULL); // XXX -+ gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, 1000, NULL); // TODO - } - - idx = gst_structure_n_fields (s) - 1; -@@ -253,6 +253,8 @@ gst_stride_transform_set_caps (GstBaseTransform *base, - GstCaps *incaps, GstCaps *outcaps) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -+ GstVideoFormat format; -+ gint width, height; - - LOG_CAPS (self, incaps); - LOG_CAPS (self, outcaps); -@@ -260,17 +262,166 @@ gst_stride_transform_set_caps (GstBaseTransform *base, - g_return_val_if_fail (gst_video_format_parse_caps_strided (incaps, - &self->format, &self->width, &self->height, &self->in_rowstride), FALSE); - g_return_val_if_fail (gst_video_format_parse_caps_strided (outcaps, -- NULL, NULL, NULL, &self->out_rowstride), FALSE); -+ &format, &width, &height, &self->out_rowstride), FALSE); -+ -+ g_return_val_if_fail (self->format == format, FALSE); -+ g_return_val_if_fail (self->width == width, FALSE); -+ g_return_val_if_fail (self->height == height, FALSE); - - return TRUE; - } - -+/* ************************************************************************* */ -+ -+/** -+ * Convert from one stride to another... like memmove, but can convert stride in -+ * the process. This function is not aware of pixels, only of bytes. So widths -+ * are given in bytes, not pixels. The new_buf and orig_buf can point to the -+ * same buffers to do an in-place conversion, but the buffer should be large -+ * enough. -+ */ -+static void -+stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height) -+{ -+ int row; -+ -+ GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d", -+ new_buf, orig_buf, new_width, orig_width, height); -+ /* if increasing the stride, work from bottom-up to avoid overwriting data -+ * that has not been moved yet.. otherwise, work in the opposite order, -+ * for the same reason. -+ */ -+ if (new_width > orig_width) { -+ for (row=height-1; row>=0; row--) { -+ memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width); -+ } -+ } else { -+ for (row=0; row<height; row++) { -+ memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width); -+ } -+ } -+} -+ -+ -+/** -+ * Convert from a non-strided buffer to strided. The two buffer pointers could -+ * be pointing to the same memory block for in-place transform.. assuming that -+ * the buffer is large enough -+ * -+ * @strided: the pointer to the resulting strided buffer -+ * @unstrided: the pointer to the initial unstrided buffer -+ * @fourcc: the color format -+ * @stride: the stride, in bytes -+ * @width: the width in pixels -+ * @height: the height in pixels -+ */ -+static GstFlowReturn -+stridify (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->out_rowstride; -+ -+ switch (self->format) { -+#if 0 /* TODO */ -+ case GST_VIDEO_FORMAT_NV12: -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ stridemove (strided, unstrided, stride, width, height * 1.5); -+ return GST_FLOW_OK; -+#endif -+ case GST_VIDEO_FORMAT_I420: -+ case GST_VIDEO_FORMAT_YV12: -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ stridemove ( -+ strided + (int)(height*stride*1.5), -+ unstrided + (int)(height*width*1.5), -+ stride, width/2, height); /* move U/V */ -+ stridemove ( -+ strided + (height*stride), -+ unstrided + (height*width), -+ stride, width/2, height); /* move V/U */ -+ stridemove (strided, unstrided, stride, width, height); /* move Y */ -+ return GST_FLOW_OK; -+ case GST_VIDEO_FORMAT_YUY2: -+ case GST_VIDEO_FORMAT_UYVY: -+ g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ stridemove (strided, unstrided, stride, width*2, height); -+ return GST_FLOW_OK; -+ default: -+ GST_WARNING ("unknown color format!\n"); -+ return GST_FLOW_ERROR; -+ } -+} -+ -+ -+/** -+ * Convert from a strided buffer to non-strided. The two buffer pointers could -+ * be pointing to the same memory block for in-place transform.. -+ * -+ * @unstrided: the pointer to the resulting unstrided buffer -+ * @strided: the pointer to the initial strided buffer -+ */ -+static GstFlowReturn -+unstridify (GstStrideTransform *self, guchar *unstrided, guchar *strided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->in_rowstride; -+ -+ switch (self->format) { -+#if 0 /* TODO */ -+ case GST_VIDEO_FORMAT_NV12: -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ stridemove (unstrided, strided, width, stride, height * 1.5); -+ return GST_FLOW_OK; -+#endif -+ case GST_VIDEO_FORMAT_I420: -+ case GST_VIDEO_FORMAT_YV12: -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ stridemove (unstrided, strided, width, stride, height); /* move Y */ -+ stridemove ( -+ unstrided + (height*width), -+ strided + (height*stride), -+ width/2, stride, height); /* move V/U */ -+ stridemove ( -+ unstrided + (int)(height*width*1.5), -+ strided + (int)(height*stride*1.5), -+ width/2, stride, height); /* move U/V */ -+ return GST_FLOW_OK; -+ case GST_VIDEO_FORMAT_YUY2: -+ case GST_VIDEO_FORMAT_UYVY: -+ g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ stridemove (unstrided, strided, width*2, stride, height); -+ return GST_FLOW_OK; -+ default: -+ GST_WARNING ("unknown color format!\n"); -+ return GST_FLOW_ERROR; -+ } -+} -+ -+ - static GstFlowReturn - gst_stride_transform_transform (GstBaseTransform *base, - GstBuffer *inbuf, GstBuffer *outbuf) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -- GST_DEBUG_OBJECT (self, "not implemented"); -+ -+ GST_DEBUG_OBJECT (self, "inbuf=%p, outbuf=%p", inbuf, outbuf); -+ -+ if (self->in_rowstride && self->out_rowstride) { -+ GST_DEBUG_OBJECT (self, "not implemented"); // TODO -+ return GST_FLOW_ERROR; -+ } else if (self->in_rowstride) { -+ return unstridify (self, -+ GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf)); -+ } else if (self->out_rowstride) { -+ return stridify (self, -+ GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf)); -+ } -+ -+ GST_DEBUG_OBJECT (self, "this shouldn't happen! in_rowstride=%d, out_rowstride=%d", -+ self->in_rowstride, self->out_rowstride); -+ - return GST_FLOW_ERROR; - } - -@@ -278,7 +429,7 @@ static GstFlowReturn - gst_stride_transform_transform_ip (GstBaseTransform *base, - GstBuffer *buf) - { -- GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -- GST_DEBUG_OBJECT (self, "not implemented"); -- return GST_FLOW_ERROR; -+ /* transform function is safe to call with same buffer ptr: -+ */ -+ return gst_stride_transform_transform (base, buf, buf); - } --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0005-add-gst_stride_transform_transform_size.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0005-add-gst_stride_transform_transform_size.patch deleted file mode 100644 index 2a791d0..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0005-add-gst_stride_transform_transform_size.patch +++ /dev/null @@ -1,143 +0,0 @@ -From c1b33e01fa6fa867b950ba0e6f4426e5a878cbe7 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Sun, 16 Aug 2009 21:04:40 -0500 -Subject: [PATCH 05/24] add gst_stride_transform_transform_size() - -input buffer size and output buffer size many not be multiples of a common unit size, so the transform_size() method should be used ---- - gst/stride/gststridetransform.c | 38 ++++++++++++++++++++++++++++++++++++-- - gst/stride/gststridetransform.h | 34 +++++----------------------------- - 2 files changed, 41 insertions(+), 31 deletions(-) - -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index a911cd0..adc22ce 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -62,7 +62,7 @@ GST_ELEMENT_DETAILS ("Stride transform", - - /* TODO: add rgb formats too! */ - #define SUPPORTED_CAPS \ -- GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2 }", "[ 0, max ]") -+ GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2, UYVY }", "[ 0, max ]") - - - static GstStaticPadTemplate src_template = -@@ -89,6 +89,10 @@ static void gst_stride_transform_dispose (GObject *obj); - /* GstBaseTransform functions */ - static gboolean gst_stride_transform_get_unit_size (GstBaseTransform *base, - GstCaps *caps, guint *size); -+static gboolean gst_stride_transform_transform_size (GstBaseTransform *base, -+ GstPadDirection direction, -+ GstCaps *caps, guint size, -+ GstCaps *othercaps, guint *othersize); - static GstCaps *gst_stride_transform_transform_caps (GstBaseTransform *base, - GstPadDirection direction, GstCaps *caps); - static gboolean gst_stride_transform_set_caps (GstBaseTransform *base, -@@ -126,6 +130,8 @@ gst_stride_transform_class_init (GstStrideTransformClass *klass) - - basetransform_class->get_unit_size = - GST_DEBUG_FUNCPTR (gst_stride_transform_get_unit_size); -+ basetransform_class->transform_size = -+ GST_DEBUG_FUNCPTR (gst_stride_transform_transform_size); - basetransform_class->transform_caps = - GST_DEBUG_FUNCPTR (gst_stride_transform_transform_caps); - basetransform_class->set_caps = -@@ -176,6 +182,34 @@ gst_stride_transform_get_unit_size (GstBaseTransform *base, - return TRUE; - } - -+/** -+ * Default transform_size function is no good, as it assumes that the output -+ * buffer size is a multiple of the unit size.. which doesn't hold true. -+ */ -+static gboolean -+gst_stride_transform_transform_size (GstBaseTransform *base, -+ GstPadDirection direction, -+ GstCaps *caps, guint size, -+ GstCaps *othercaps, guint *othersize) -+{ -+ GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -+ guint idx = (direction == GST_PAD_SINK) ? 0 : 1; -+ -+ if (self->cached_caps[idx] != othercaps) -+ { -+ if (!gst_stride_transform_get_unit_size (base, othercaps, -+ &(self->cached_size[idx]))) -+ { -+ return FALSE; -+ } -+ } -+ -+ *othersize = self->cached_size[idx]; -+ -+ return TRUE; -+} -+ -+ - - /** - * helper to add all fields, other than rowstride to @caps, copied from @s. -@@ -187,7 +221,7 @@ add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rows - GstStructure *new_s = gst_structure_new (name, NULL); - - if (rowstride) { -- gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, 1000, NULL); // TODO -+ gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); - } - - idx = gst_structure_n_fields (s) - 1; -diff --git a/gst/stride/gststridetransform.h b/gst/stride/gststridetransform.h -index d80197f..481959e 100644 ---- a/gst/stride/gststridetransform.h -+++ b/gst/stride/gststridetransform.h -@@ -59,6 +59,10 @@ struct _GstStrideTransform { - gint width, height; - gint in_rowstride; - gint out_rowstride; -+ -+ /* for caching the tranform_size() results.. */ -+ GstCaps *cached_caps[2]; -+ guint cached_size[2]; - }; - - struct _GstStrideTransformClass { -@@ -70,35 +74,7 @@ GType gst_stride_transform_get_type (void); - G_END_DECLS - - -- -- --/* note: in case this is a build with TTIF logging, we can optimize slightly -- * and avoid the gst_caps_to_string() in case logging isn't enabled by using -- * the TTIF_TRACE_ARG_PROCESSOR feature of ttif_trace_fprintf(): -- */ --#ifdef GST_LOG_OVER_TTIF --# define LOG_CAPS(obj, caps) G_STMT_START { \ -- if (caps) { \ -- static TTIF_TRACE_ARG_PROCESSOR proc = { \ -- .convert = (char (*)(void *))gst_caps_to_string, \ -- .free = (void (*)(char *))g_free \ -- }; \ -- GST_DEBUG_OBJECT (obj, "%s: %qs", #caps, &proc, (caps)); \ -- } else { \ -- GST_DEBUG_OBJECT (obj, "null"); \ -- } \ -- } G_STMT_END --#else --# define LOG_CAPS(obj, caps) G_STMT_START { \ -- if (caps) { \ -- gchar *capstr = gst_caps_to_string (caps); \ -- GST_DEBUG_OBJECT (obj, "%s: %s", #caps, capstr); \ -- g_free (capstr); \ -- } else { \ -- GST_DEBUG_OBJECT (obj, "null"); \ -- } \ -- } G_STMT_END --#endif -+#define LOG_CAPS(obj, caps) GST_DEBUG_OBJECT (obj, "%s: %"GST_PTR_FORMAT, #caps, caps) - - - #endif /* __GSTSTRIDETRANSFORM_H__ */ --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0006-fix-a-small-typo.-need-to-use-the-smaller-of-new_wid.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0006-fix-a-small-typo.-need-to-use-the-smaller-of-new_wid.patch deleted file mode 100644 index 14f7d3f..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0006-fix-a-small-typo.-need-to-use-the-smaller-of-new_wid.patch +++ /dev/null @@ -1,36 +0,0 @@ -From db7698656e71dc4a898fec9e46ae6c9d04352447 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Wed, 19 Aug 2009 15:33:50 -0500 -Subject: [PATCH 06/24] fix a small typo.. need to use the smaller of {new_width, orig_width} for the line-by-line copy to avoid overwriting past end of buffer - ---- - gst/stride/gststridetransform.c | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index adc22ce..ea52500 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -331,7 +331,7 @@ stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, - } - } else { - for (row=0; row<height; row++) { -- memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width); -+ memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width); - } - } - } -@@ -440,7 +440,9 @@ gst_stride_transform_transform (GstBaseTransform *base, - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); - -- GST_DEBUG_OBJECT (self, "inbuf=%p, outbuf=%p", inbuf, outbuf); -+ GST_DEBUG_OBJECT (self, "inbuf=%p (size=%d), outbuf=%p (size=%d)", -+ inbuf, GST_BUFFER_SIZE (inbuf), -+ outbuf, GST_BUFFER_SIZE (outbuf)); - - if (self->in_rowstride && self->out_rowstride) { - GST_DEBUG_OBJECT (self, "not implemented"); // TODO --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0007-Add-NV12-support-in-stridetransform.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0007-Add-NV12-support-in-stridetransform.patch deleted file mode 100644 index fae77f7..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0007-Add-NV12-support-in-stridetransform.patch +++ /dev/null @@ -1,77 +0,0 @@ -From f392c3f35052b57343e814d8f2d52b4f788d5d45 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 20 Nov 2009 18:43:12 -0600 -Subject: [PATCH 07/24] Add NV12 support in stridetransform - ---- - gst-libs/gst/video/video.c | 3 +++ - gst/stride/gststridetransform.c | 12 ++++-------- - 2 files changed, 7 insertions(+), 8 deletions(-) - -diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c -index 24f1ac8..ff9c4fb 100644 ---- a/gst-libs/gst/video/video.c -+++ b/gst-libs/gst/video/video.c -@@ -2025,6 +2025,9 @@ gst_video_format_get_size_strided (GstVideoFormat format, - case GST_VIDEO_FORMAT_Y42B: - case GST_VIDEO_FORMAT_Y444: - return GST_ROUND_UP_4 (3 * rowstride * height); -+ case GST_VIDEO_FORMAT_NV12: -+ case GST_VIDEO_FORMAT_NV21: -+ return GST_ROUND_UP_4 (rowstride) * GST_ROUND_UP_2 (height) * 3 / 2; - default: - return 0; - } -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index ea52500..56207d0 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -2,7 +2,7 @@ - * - * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/ - * -- * Description: V4L2 sink element -+ * Description: stride transform element - * Created on: Jul 30, 2009 - * Author: Rob Clark <rob@ti.com> - * -@@ -62,7 +62,7 @@ GST_ELEMENT_DETAILS ("Stride transform", - - /* TODO: add rgb formats too! */ - #define SUPPORTED_CAPS \ -- GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2, UYVY }", "[ 0, max ]") -+ GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2, UYVY, NV12 }", "[ 0, max ]") - - - static GstStaticPadTemplate src_template = -@@ -357,12 +357,10 @@ stridify (GstStrideTransform *self, guchar *strided, guchar *unstrided) - gint stride = self->out_rowstride; - - switch (self->format) { --#if 0 /* TODO */ - case GST_VIDEO_FORMAT_NV12: - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -- stridemove (strided, unstrided, stride, width, height * 1.5); -+ stridemove (strided, unstrided, stride, width, (GST_ROUND_UP_2 (height) * 3) / 2); - return GST_FLOW_OK; --#endif - case GST_VIDEO_FORMAT_I420: - case GST_VIDEO_FORMAT_YV12: - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -@@ -403,12 +401,10 @@ unstridify (GstStrideTransform *self, guchar *unstrided, guchar *strided) - gint stride = self->in_rowstride; - - switch (self->format) { --#if 0 /* TODO */ - case GST_VIDEO_FORMAT_NV12: - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -- stridemove (unstrided, strided, width, stride, height * 1.5); -+ stridemove (unstrided, strided, width, stride, (GST_ROUND_UP_2 (height) * 3) / 2); - return GST_FLOW_OK; --#endif - case GST_VIDEO_FORMAT_I420: - case GST_VIDEO_FORMAT_YV12: - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0008-add-basic-support-for-I420-NV12-colorspace-conversio.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0008-add-basic-support-for-I420-NV12-colorspace-conversio.patch deleted file mode 100644 index 5898e0a..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0008-add-basic-support-for-I420-NV12-colorspace-conversio.patch +++ /dev/null @@ -1,186 +0,0 @@ -From 4b74d1b679855e8c709fde124fd9f0027ba8d916 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 27 Nov 2009 11:13:47 -0600 -Subject: [PATCH 08/24] add basic support for I420->NV12 colorspace conversion - ---- - gst/stride/gststridetransform.c | 109 ++++++++++++++++++++++++++++++++++++--- - gst/stride/gststridetransform.h | 2 +- - 2 files changed, 103 insertions(+), 8 deletions(-) - -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index 56207d0..03deeb1 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -227,11 +227,43 @@ add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rows - idx = gst_structure_n_fields (s) - 1; - while (idx >= 0) { - const gchar *name = gst_structure_nth_field_name (s, idx); -+ idx--; -+ if (!strcmp ("format", name)) { -+ // we can do simple color format translations, such as converting from one -+ // YUV420 format to another: -+ GValue formats = {0}; -+ GValue fourccval = {0}; -+ guint fourcc; -+ if (gst_structure_get_fourcc (s, name, &fourcc)) { -+ switch (gst_video_format_from_fourcc (fourcc)) { -+ case GST_VIDEO_FORMAT_NV12: -+ case GST_VIDEO_FORMAT_I420: -+GST_DEBUG ("Hmm, let's say I can convert I420<-->NV12.."); -+ g_value_init (&formats, GST_TYPE_LIST); -+ g_value_init (&fourccval, GST_TYPE_FOURCC); -+ gst_value_set_fourcc (&fourccval, -+ GST_MAKE_FOURCC ('I', '4', '2', '0')); -+ gst_value_list_append_value (&formats, &fourccval); -+ gst_value_set_fourcc (&fourccval, -+ GST_MAKE_FOURCC ('N', 'V', '1', '2')); -+ gst_value_list_append_value (&formats, &fourccval); -+ gst_structure_set_value (new_s, "format", &formats); -+ continue; -+/* maybe handle other cases later.. -+ case GST_VIDEO_FORMAT_YV12: -+ case GST_VIDEO_FORMAT_YUY2: -+ case GST_VIDEO_FORMAT_UYVY: -+*/ -+ default: -+ break; -+ } -+ } -+ } -+ - if (strcmp ("rowstride", name)) { - const GValue *val = gst_structure_get_value (s, name); - gst_structure_set_value (new_s, name, val); - } -- idx--; - } - - gst_caps_merge_structure (caps, new_s); -@@ -287,18 +319,16 @@ gst_stride_transform_set_caps (GstBaseTransform *base, - GstCaps *incaps, GstCaps *outcaps) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -- GstVideoFormat format; - gint width, height; - - LOG_CAPS (self, incaps); - LOG_CAPS (self, outcaps); - - g_return_val_if_fail (gst_video_format_parse_caps_strided (incaps, -- &self->format, &self->width, &self->height, &self->in_rowstride), FALSE); -+ &self->in_format, &self->width, &self->height, &self->in_rowstride), FALSE); - g_return_val_if_fail (gst_video_format_parse_caps_strided (outcaps, -- &format, &width, &height, &self->out_rowstride), FALSE); -+ &self->out_format, &width, &height, &self->out_rowstride), FALSE); - -- g_return_val_if_fail (self->format == format, FALSE); - g_return_val_if_fail (self->width == width, FALSE); - g_return_val_if_fail (self->height == height, FALSE); - -@@ -307,6 +337,49 @@ gst_stride_transform_set_caps (GstBaseTransform *base, - - /* ************************************************************************* */ - -+static void -+memmove_demux (guchar *new_buf, guchar *orig_buf, gint sz, gint pxstride) -+{ -+ if (new_buf > orig_buf) { -+ /* copy backwards */ -+ new_buf += (sz * pxstride); -+ orig_buf += sz; -+ while(sz--) { -+ *new_buf = *orig_buf; -+ new_buf -= pxstride; -+ orig_buf--; -+ } -+ } else { -+ while(sz--) { -+ *new_buf = *orig_buf; -+ new_buf += pxstride; -+ orig_buf++; -+ } -+ } -+} -+ -+static void -+stridemove_demux (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height, gint pxstride) -+{ -+ int row; -+ -+ GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d", -+ new_buf, orig_buf, new_width, orig_width, height); -+ /* if increasing the stride, work from bottom-up to avoid overwriting data -+ * that has not been moved yet.. otherwise, work in the opposite order, -+ * for the same reason. -+ */ -+ if (new_width > orig_width) { -+ for (row=height-1; row>=0; row--) { -+ memmove_demux (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width, pxstride); -+ } -+ } else { -+ for (row=0; row<height; row++) { -+ memmove_demux (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width, pxstride); -+ } -+ } -+} -+ - /** - * Convert from one stride to another... like memmove, but can convert stride in - * the process. This function is not aware of pixels, only of bytes. So widths -@@ -356,7 +429,29 @@ stridify (GstStrideTransform *self, guchar *strided, guchar *unstrided) - gint height = self->height; - gint stride = self->out_rowstride; - -- switch (self->format) { -+ if (self->out_format != self->in_format) { -+ -+ if ((self->in_format == GST_VIDEO_FORMAT_I420) && -+ (self->out_format == GST_VIDEO_FORMAT_NV12)) { -+ /* note: if not an in-place conversion, then doing the U&V in one pass -+ * would be more efficient... but if it is an in-place conversion, I'd -+ * need to think about whether it is potential for the new UV plane to -+ * corrupt the V plane before it is done copying.. -+ */ -+ stridemove_demux ( -+ strided + (height*stride) + 1, -+ unstrided + (int)(height*width*1.25), -+ stride, width/2, height/2, 2); /* move V */ -+ stridemove_demux ( -+ strided + (height*stride), -+ unstrided + (height*width), -+ stride, width/2, height/2, 2); /* move U */ -+ stridemove (strided, unstrided, stride, width, height); /* move Y */ -+ return GST_FLOW_OK; -+ } -+ } -+ -+ switch (self->out_format) { - case GST_VIDEO_FORMAT_NV12: - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); - stridemove (strided, unstrided, stride, width, (GST_ROUND_UP_2 (height) * 3) / 2); -@@ -400,7 +495,7 @@ unstridify (GstStrideTransform *self, guchar *unstrided, guchar *strided) - gint height = self->height; - gint stride = self->in_rowstride; - -- switch (self->format) { -+ switch (self->out_format) { - case GST_VIDEO_FORMAT_NV12: - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); - stridemove (unstrided, strided, width, stride, (GST_ROUND_UP_2 (height) * 3) / 2); -diff --git a/gst/stride/gststridetransform.h b/gst/stride/gststridetransform.h -index 481959e..0141571 100644 ---- a/gst/stride/gststridetransform.h -+++ b/gst/stride/gststridetransform.h -@@ -55,7 +55,7 @@ struct _GstStrideTransform { - GstVideoFilter videofilter; - - /*< private >*/ -- GstVideoFormat format; -+ GstVideoFormat in_format, out_format; - gint width, height; - gint in_rowstride; - gint out_rowstride; --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0009-fix-to-avoid-parsing-caps-on-every-frame.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0009-fix-to-avoid-parsing-caps-on-every-frame.patch deleted file mode 100644 index b67789f..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0009-fix-to-avoid-parsing-caps-on-every-frame.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 8132aecf99071faab59739ebabd7bcd41a2ab581 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 27 Nov 2009 11:14:58 -0600 -Subject: [PATCH 09/24] fix to avoid parsing caps on every frame - ---- - gst/stride/gststridetransform.c | 10 +++++++--- - 1 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index 03deeb1..143a9f7 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -197,11 +197,15 @@ gst_stride_transform_transform_size (GstBaseTransform *base, - - if (self->cached_caps[idx] != othercaps) - { -- if (!gst_stride_transform_get_unit_size (base, othercaps, -- &(self->cached_size[idx]))) -- { -+ guint sz; -+ if (!gst_stride_transform_get_unit_size (base, othercaps, &sz)) { - return FALSE; - } -+ if (self->cached_caps[idx]) { -+ gst_caps_unref (self->cached_caps[idx]); -+ } -+ self->cached_size[idx] = sz; -+ self->cached_caps[idx] = gst_caps_ref (othercaps); - } - - *othersize = self->cached_size[idx]; --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0010-refactor-stridetransform-to-make-it-easier-to-add-ne.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0010-refactor-stridetransform-to-make-it-easier-to-add-ne.patch deleted file mode 100644 index f8c3612..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0010-refactor-stridetransform-to-make-it-easier-to-add-ne.patch +++ /dev/null @@ -1,759 +0,0 @@ -From c854bfe87a39d640dfd3381bcba83281d9316b50 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 27 Nov 2009 15:05:56 -0600 -Subject: [PATCH 10/24] refactor stridetransform to make it easier to add new transforms (stride and/or colorspace) - ---- - gst/stride/Makefile.am | 1 + - gst/stride/convert.c | 267 +++++++++++++++++++++++++++++++++++ - gst/stride/gststridetransform.c | 295 ++++++++------------------------------- - gst/stride/gststridetransform.h | 18 ++- - 4 files changed, 340 insertions(+), 241 deletions(-) - create mode 100644 gst/stride/convert.c - -diff --git a/gst/stride/Makefile.am b/gst/stride/Makefile.am -index 1adc197..0b61d55 100644 ---- a/gst/stride/Makefile.am -+++ b/gst/stride/Makefile.am -@@ -2,6 +2,7 @@ plugin_LTLIBRARIES = libgststridetransform.la - - libgststridetransform_la_SOURCES = \ - gststridetransform.c \ -+ convert.c \ - plugin.c - - libgststridetransform_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) -diff --git a/gst/stride/convert.c b/gst/stride/convert.c -new file mode 100644 -index 0000000..860f16c ---- /dev/null -+++ b/gst/stride/convert.c -@@ -0,0 +1,267 @@ -+/* GStreamer -+ * -+ * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/ -+ * -+ * Description: stride transform conversion utilities -+ * Created on: Nov 27, 2009 -+ * Author: Rob Clark <rob@ti.com> -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 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 -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+ * Boston, MA 02111-1307, USA. -+ */ -+ -+ -+#ifdef HAVE_CONFIG_H -+#include <config.h> -+#endif -+ -+#include <string.h> -+#include <gst/video/video.h> -+ -+#include "gststridetransform.h" -+ -+ -+GST_DEBUG_CATEGORY_EXTERN (stridetransform_debug); -+#define GST_CAT_DEFAULT stridetransform_debug -+ -+ -+/* -+ * Conversion utilities: -+ */ -+ -+static void -+memmove_demux (guchar *new_buf, guchar *orig_buf, gint sz, gint pxstride) -+{ -+ if (new_buf > orig_buf) { -+ /* copy backwards */ -+ new_buf += ((sz - 1) * pxstride); -+ orig_buf += sz - 1; -+ while(sz--) { -+ *new_buf = *orig_buf; -+ new_buf -= pxstride; -+ orig_buf--; -+ } -+ } else { -+ while(sz--) { -+ *new_buf = *orig_buf; -+ new_buf += pxstride; -+ orig_buf++; -+ } -+ } -+} -+ -+static void -+stridemove_demux (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height, gint pxstride) -+{ -+ int row; -+ -+ GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d", -+ new_buf, orig_buf, new_width, orig_width, height); -+ -+ /* if increasing the stride, work from bottom-up to avoid overwriting data -+ * that has not been moved yet.. otherwise, work in the opposite order, -+ * for the same reason. -+ */ -+ if (new_width > orig_width) { -+ for (row=height-1; row>=0; row--) { -+ memmove_demux (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width, pxstride); -+ } -+ } else { -+ for (row=0; row<height; row++) { -+ memmove_demux (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width, pxstride); -+ } -+ } -+} -+ -+/** -+ * Convert from one stride to another... like memmove, but can convert stride in -+ * the process. This function is not aware of pixels, only of bytes. So widths -+ * are given in bytes, not pixels. The new_buf and orig_buf can point to the -+ * same buffers to do an in-place conversion, but the buffer should be large -+ * enough. -+ */ -+static void -+stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height) -+{ -+ int row; -+ -+ GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d", -+ new_buf, orig_buf, new_width, orig_width, height); -+ -+ /* if increasing the stride, work from bottom-up to avoid overwriting data -+ * that has not been moved yet.. otherwise, work in the opposite order, -+ * for the same reason. -+ */ -+ if (new_width > orig_width) { -+ for (row=height-1; row>=0; row--) { -+ memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width); -+ } -+ } else { -+ for (row=0; row<height; row++) { -+ memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width); -+ } -+ } -+} -+ -+/* -+ * Conversion Functions: -+ */ -+ -+/** convert 4:2:0 semiplanar to same 4:2:0 semiplanar */ -+static GstFlowReturn -+unstridify_420sp_420sp (GstStrideTransform *self, guchar *unstrided, guchar *strided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->in_rowstride; -+ -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ -+ stridemove (unstrided, strided, width, stride, -+ (GST_ROUND_UP_2 (height) * 3) / 2); -+ -+ return GST_FLOW_OK; -+} -+static GstFlowReturn -+stridify_420sp_420sp (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->out_rowstride; -+ -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ stridemove (strided, unstrided, stride, width, -+ (GST_ROUND_UP_2 (height) * 3) / 2); -+ -+ return GST_FLOW_OK; -+} -+ -+/** convert 4:2:0 planar to same 4:2:0 planar */ -+static GstFlowReturn -+unstridify_420p_420p (GstStrideTransform *self, guchar *unstrided, guchar *strided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->in_rowstride; -+ -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ -+ stridemove (unstrided, strided, width, stride, height); /* move Y */ -+ stridemove ( -+ unstrided + (height*width), -+ strided + (height*stride), -+ width/2, stride, height); /* move V/U */ -+ /* XXX odd widths/heights/strides: */ -+ stridemove ( -+ unstrided + (int)(height*width*1.5), -+ strided + (int)(height*stride*1.5), -+ width/2, stride, height); /* move U/V */ -+ -+ return GST_FLOW_OK; -+} -+static GstFlowReturn -+stridify_420p_420p (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->out_rowstride; -+ -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ -+ /* XXX odd widths/heights/strides: */ -+ stridemove ( -+ strided + (int)(height*stride*1.5), -+ unstrided + (int)(height*width*1.5), -+ stride, width/2, height); /* move U/V */ -+ stridemove ( -+ strided + (height*stride), -+ unstrided + (height*width), -+ stride, width/2, height); /* move V/U */ -+ stridemove (strided, unstrided, stride, width, height); /* move Y */ -+ -+ return GST_FLOW_OK; -+} -+ -+/** convert 4:2:2 packed to same 4:2:2 packed */ -+static GstFlowReturn -+unstridify_422i_422i (GstStrideTransform *self, guchar *unstrided, guchar *strided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->in_rowstride; -+ -+ g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ -+ stridemove (unstrided, strided, width*2, stride, height); -+ -+ return GST_FLOW_OK; -+} -+static GstFlowReturn -+stridify_422i_422i (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->out_rowstride; -+ -+ g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ -+ stridemove (strided, unstrided, stride, width*2, height); -+ -+ return GST_FLOW_OK; -+} -+ -+/** convert I420 unstrided to NV12 strided */ -+static GstFlowReturn -+stridify_i420_nv12 (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->out_rowstride; -+ -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ -+ /* note: if not an in-place conversion, then doing the U&V in one pass -+ * would be more efficient... but if it is an in-place conversion, I'd -+ * need to think about whether it is potential for the new UV plane to -+ * corrupt the V plane before it is done copying.. -+ */ -+ stridemove_demux ( -+ strided + (height*stride) + 1, -+ unstrided + (int)(height*width*1.25), -+ stride, width/2, height/2, 2); /* move V */ -+ stridemove_demux ( -+ strided + (height*stride), -+ unstrided + (height*width), -+ stride, width/2, height/2, 2); /* move U */ -+ stridemove (strided, unstrided, stride, width, height); /* move Y */ -+ -+ return GST_FLOW_OK; -+} -+ -+/* last entry has GST_VIDEO_FORMAT_UNKNOWN for in/out formats */ -+Conversion stride_conversions[] = { -+ { { GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV12 }, stridify_420sp_420sp, unstridify_420sp_420sp }, -+ { { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_I420 }, stridify_420p_420p, unstridify_420p_420p }, -+ { { GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YV12 }, stridify_420p_420p, unstridify_420p_420p }, -+ { { GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YUY2 }, stridify_422i_422i, unstridify_422i_422i }, -+ { { GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_UYVY }, stridify_422i_422i, unstridify_422i_422i }, -+ { { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_NV12 }, stridify_i420_nv12, NULL }, -+ /* add new entries before here */ -+ { { GST_VIDEO_FORMAT_UNKNOWN } } -+}; -+ -+ -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index 143a9f7..6ab0479 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -47,12 +47,17 @@ - #endif - - #include <string.h> -+ - #include <gst/video/video.h> - - #include "gst/gst-i18n-plugin.h" - #include "gststridetransform.h" - - -+/* last entry has GST_VIDEO_FORMAT_UNKNOWN for in/out formats */ -+extern const Conversion stride_conversions[]; -+ -+ - static const GstElementDetails stridetransform_details = - GST_ELEMENT_DETAILS ("Stride transform", - "Filter/Converter/Video", -@@ -70,14 +75,14 @@ GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (SUPPORTED_CAPS) -- ); -+); - - static GstStaticPadTemplate sink_template = - GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (SUPPORTED_CAPS) -- ); -+); - - - GST_DEBUG_CATEGORY (stridetransform_debug); -@@ -99,8 +104,6 @@ static gboolean gst_stride_transform_set_caps (GstBaseTransform *base, - GstCaps *incaps, GstCaps *outcaps); - static GstFlowReturn gst_stride_transform_transform (GstBaseTransform *base, - GstBuffer *inbuf, GstBuffer *outbuf); --static GstFlowReturn gst_stride_transform_transform_ip (GstBaseTransform *base, -- GstBuffer *buf); - - GST_BOILERPLATE (GstStrideTransform, gst_stride_transform, GstVideoFilter, GST_TYPE_VIDEO_FILTER); - -@@ -136,8 +139,6 @@ gst_stride_transform_class_init (GstStrideTransformClass *klass) - GST_DEBUG_FUNCPTR (gst_stride_transform_transform_caps); - basetransform_class->set_caps = - GST_DEBUG_FUNCPTR (gst_stride_transform_set_caps); -- basetransform_class->transform_ip = -- GST_DEBUG_FUNCPTR (gst_stride_transform_transform_ip); - basetransform_class->transform = - GST_DEBUG_FUNCPTR (gst_stride_transform_transform); - -@@ -219,7 +220,7 @@ gst_stride_transform_transform_size (GstBaseTransform *base, - * helper to add all fields, other than rowstride to @caps, copied from @s. - */ - static void --add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rowstride) -+add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rowstride, GstPadDirection direction) - { - gint idx; - GstStructure *new_s = gst_structure_new (name, NULL); -@@ -232,38 +233,39 @@ add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rows - while (idx >= 0) { - const gchar *name = gst_structure_nth_field_name (s, idx); - idx--; -+ -+ /* for format field, check the stride_conversions table to see what -+ * we can support: -+ */ - if (!strcmp ("format", name)) { -- // we can do simple color format translations, such as converting from one -- // YUV420 format to another: -- GValue formats = {0}; -- GValue fourccval = {0}; - guint fourcc; -- if (gst_structure_get_fourcc (s, name, &fourcc)) { -- switch (gst_video_format_from_fourcc (fourcc)) { -- case GST_VIDEO_FORMAT_NV12: -- case GST_VIDEO_FORMAT_I420: --GST_DEBUG ("Hmm, let's say I can convert I420<-->NV12.."); -- g_value_init (&formats, GST_TYPE_LIST); -- g_value_init (&fourccval, GST_TYPE_FOURCC); -- gst_value_set_fourcc (&fourccval, -- GST_MAKE_FOURCC ('I', '4', '2', '0')); -- gst_value_list_append_value (&formats, &fourccval); -- gst_value_set_fourcc (&fourccval, -- GST_MAKE_FOURCC ('N', 'V', '1', '2')); -+ -+ /* XXX double check this: */ -+ gint to_format = (direction == GST_PAD_SINK) ? 1 : 0; -+ gint from_format = (direction == GST_PAD_SRC) ? 1 : 0; -+ -+ if (gst_structure_get_fourcc (s, "format", &fourcc)) { -+ GValue formats = {0}; -+ GValue fourccval = {0}; -+ gint i; -+ GstVideoFormat format = gst_video_format_from_fourcc (fourcc); -+ -+ g_value_init (&formats, GST_TYPE_LIST); -+ g_value_init (&fourccval, GST_TYPE_FOURCC); -+ -+ for (i=0; stride_conversions[i].format[0]!=GST_VIDEO_FORMAT_UNKNOWN; i++) { -+ if (stride_conversions[i].format[from_format] == format) { -+ gst_value_set_fourcc (&fourccval, gst_video_format_to_fourcc -+ (stride_conversions[i].format[to_format])); - gst_value_list_append_value (&formats, &fourccval); -- gst_structure_set_value (new_s, "format", &formats); -- continue; --/* maybe handle other cases later.. -- case GST_VIDEO_FORMAT_YV12: -- case GST_VIDEO_FORMAT_YUY2: -- case GST_VIDEO_FORMAT_UYVY: --*/ -- default: -- break; -+ } - } -+ -+ continue; - } - } - -+ /* copy over all other non-rowstride fields: */ - if (strcmp ("rowstride", name)) { - const GValue *val = gst_structure_get_value (s, name); - gst_structure_set_value (new_s, name, val); -@@ -297,14 +299,14 @@ gst_stride_transform_transform_caps (GstBaseTransform *base, - if (gst_structure_has_name (s, "video/x-raw-yuv") || - gst_structure_has_name (s, "video/x-raw-yuv-strided")) { - -- add_all_fields (ret, "video/x-raw-yuv", s, FALSE); -- add_all_fields (ret, "video/x-raw-yuv-strided", s, TRUE); -+ add_all_fields (ret, "video/x-raw-yuv", s, FALSE, direction); -+ add_all_fields (ret, "video/x-raw-yuv-strided", s, TRUE, direction); - - } else if (gst_structure_has_name (s, "video/x-raw-rgb") || - gst_structure_has_name (s, "video/x-raw-rgb-strided")) { - -- add_all_fields (ret, "video/x-raw-rgb", s, FALSE); -- add_all_fields (ret, "video/x-raw-rgb-strided", s, TRUE); -+ add_all_fields (ret, "video/x-raw-rgb", s, FALSE, direction); -+ add_all_fields (ret, "video/x-raw-rgb-strided", s, TRUE, direction); - - } - -@@ -324,211 +326,37 @@ gst_stride_transform_set_caps (GstBaseTransform *base, - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); - gint width, height; -+ GstVideoFormat in_format, out_format; -+ gint i; - - LOG_CAPS (self, incaps); - LOG_CAPS (self, outcaps); - - g_return_val_if_fail (gst_video_format_parse_caps_strided (incaps, -- &self->in_format, &self->width, &self->height, &self->in_rowstride), FALSE); -+ &in_format, &self->width, &self->height, &self->in_rowstride), FALSE); - g_return_val_if_fail (gst_video_format_parse_caps_strided (outcaps, -- &self->out_format, &width, &height, &self->out_rowstride), FALSE); -- -- g_return_val_if_fail (self->width == width, FALSE); -- g_return_val_if_fail (self->height == height, FALSE); -- -- return TRUE; --} -- --/* ************************************************************************* */ -- --static void --memmove_demux (guchar *new_buf, guchar *orig_buf, gint sz, gint pxstride) --{ -- if (new_buf > orig_buf) { -- /* copy backwards */ -- new_buf += (sz * pxstride); -- orig_buf += sz; -- while(sz--) { -- *new_buf = *orig_buf; -- new_buf -= pxstride; -- orig_buf--; -- } -- } else { -- while(sz--) { -- *new_buf = *orig_buf; -- new_buf += pxstride; -- orig_buf++; -- } -- } --} -- --static void --stridemove_demux (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height, gint pxstride) --{ -- int row; -- -- GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d", -- new_buf, orig_buf, new_width, orig_width, height); -- /* if increasing the stride, work from bottom-up to avoid overwriting data -- * that has not been moved yet.. otherwise, work in the opposite order, -- * for the same reason. -- */ -- if (new_width > orig_width) { -- for (row=height-1; row>=0; row--) { -- memmove_demux (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width, pxstride); -- } -- } else { -- for (row=0; row<height; row++) { -- memmove_demux (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width, pxstride); -- } -- } --} -+ &out_format, &width, &height, &self->out_rowstride), FALSE); - --/** -- * Convert from one stride to another... like memmove, but can convert stride in -- * the process. This function is not aware of pixels, only of bytes. So widths -- * are given in bytes, not pixels. The new_buf and orig_buf can point to the -- * same buffers to do an in-place conversion, but the buffer should be large -- * enough. -- */ --static void --stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height) --{ -- int row; -- -- GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d", -- new_buf, orig_buf, new_width, orig_width, height); -- /* if increasing the stride, work from bottom-up to avoid overwriting data -- * that has not been moved yet.. otherwise, work in the opposite order, -- * for the same reason. -- */ -- if (new_width > orig_width) { -- for (row=height-1; row>=0; row--) { -- memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width); -- } -- } else { -- for (row=0; row<height; row++) { -- memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width); -- } -- } --} -+ self->conversion = NULL; - -- --/** -- * Convert from a non-strided buffer to strided. The two buffer pointers could -- * be pointing to the same memory block for in-place transform.. assuming that -- * the buffer is large enough -- * -- * @strided: the pointer to the resulting strided buffer -- * @unstrided: the pointer to the initial unstrided buffer -- * @fourcc: the color format -- * @stride: the stride, in bytes -- * @width: the width in pixels -- * @height: the height in pixels -- */ --static GstFlowReturn --stridify (GstStrideTransform *self, guchar *strided, guchar *unstrided) --{ -- gint width = self->width; -- gint height = self->height; -- gint stride = self->out_rowstride; -- -- if (self->out_format != self->in_format) { -- -- if ((self->in_format == GST_VIDEO_FORMAT_I420) && -- (self->out_format == GST_VIDEO_FORMAT_NV12)) { -- /* note: if not an in-place conversion, then doing the U&V in one pass -- * would be more efficient... but if it is an in-place conversion, I'd -- * need to think about whether it is potential for the new UV plane to -- * corrupt the V plane before it is done copying.. -- */ -- stridemove_demux ( -- strided + (height*stride) + 1, -- unstrided + (int)(height*width*1.25), -- stride, width/2, height/2, 2); /* move V */ -- stridemove_demux ( -- strided + (height*stride), -- unstrided + (height*width), -- stride, width/2, height/2, 2); /* move U */ -- stridemove (strided, unstrided, stride, width, height); /* move Y */ -- return GST_FLOW_OK; -+ for (i=0; stride_conversions[i].format[0]!=GST_VIDEO_FORMAT_UNKNOWN; i++) { -+ if ((stride_conversions[i].format[0] == in_format) && -+ (stride_conversions[i].format[1] == out_format)) { -+ GST_DEBUG_OBJECT (self, "found stride_conversion: %d", i); -+ self->conversion = &stride_conversions[i]; -+ break; - } - } - -- switch (self->out_format) { -- case GST_VIDEO_FORMAT_NV12: -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -- stridemove (strided, unstrided, stride, width, (GST_ROUND_UP_2 (height) * 3) / 2); -- return GST_FLOW_OK; -- case GST_VIDEO_FORMAT_I420: -- case GST_VIDEO_FORMAT_YV12: -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -- stridemove ( -- strided + (int)(height*stride*1.5), -- unstrided + (int)(height*width*1.5), -- stride, width/2, height); /* move U/V */ -- stridemove ( -- strided + (height*stride), -- unstrided + (height*width), -- stride, width/2, height); /* move V/U */ -- stridemove (strided, unstrided, stride, width, height); /* move Y */ -- return GST_FLOW_OK; -- case GST_VIDEO_FORMAT_YUY2: -- case GST_VIDEO_FORMAT_UYVY: -- g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -- stridemove (strided, unstrided, stride, width*2, height); -- return GST_FLOW_OK; -- default: -- GST_WARNING ("unknown color format!\n"); -- return GST_FLOW_ERROR; -- } --} -- -+ g_return_val_if_fail (self->conversion, FALSE); -+ g_return_val_if_fail (self->conversion->unstridify || !self->in_rowstride, FALSE); -+ g_return_val_if_fail (self->conversion->stridify || !self->out_rowstride, FALSE); -+ g_return_val_if_fail (self->width == width, FALSE); -+ g_return_val_if_fail (self->height == height, FALSE); - --/** -- * Convert from a strided buffer to non-strided. The two buffer pointers could -- * be pointing to the same memory block for in-place transform.. -- * -- * @unstrided: the pointer to the resulting unstrided buffer -- * @strided: the pointer to the initial strided buffer -- */ --static GstFlowReturn --unstridify (GstStrideTransform *self, guchar *unstrided, guchar *strided) --{ -- gint width = self->width; -- gint height = self->height; -- gint stride = self->in_rowstride; -- -- switch (self->out_format) { -- case GST_VIDEO_FORMAT_NV12: -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -- stridemove (unstrided, strided, width, stride, (GST_ROUND_UP_2 (height) * 3) / 2); -- return GST_FLOW_OK; -- case GST_VIDEO_FORMAT_I420: -- case GST_VIDEO_FORMAT_YV12: -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -- stridemove (unstrided, strided, width, stride, height); /* move Y */ -- stridemove ( -- unstrided + (height*width), -- strided + (height*stride), -- width/2, stride, height); /* move V/U */ -- stridemove ( -- unstrided + (int)(height*width*1.5), -- strided + (int)(height*stride*1.5), -- width/2, stride, height); /* move U/V */ -- return GST_FLOW_OK; -- case GST_VIDEO_FORMAT_YUY2: -- case GST_VIDEO_FORMAT_UYVY: -- g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -- stridemove (unstrided, strided, width*2, stride, height); -- return GST_FLOW_OK; -- default: -- GST_WARNING ("unknown color format!\n"); -- return GST_FLOW_ERROR; -- } -+ return TRUE; - } - -- - static GstFlowReturn - gst_stride_transform_transform (GstBaseTransform *base, - GstBuffer *inbuf, GstBuffer *outbuf) -@@ -543,10 +371,10 @@ gst_stride_transform_transform (GstBaseTransform *base, - GST_DEBUG_OBJECT (self, "not implemented"); // TODO - return GST_FLOW_ERROR; - } else if (self->in_rowstride) { -- return unstridify (self, -+ return self->conversion->unstridify (self, - GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf)); - } else if (self->out_rowstride) { -- return stridify (self, -+ return self->conversion->stridify (self, - GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf)); - } - -@@ -555,12 +383,3 @@ gst_stride_transform_transform (GstBaseTransform *base, - - return GST_FLOW_ERROR; - } -- --static GstFlowReturn --gst_stride_transform_transform_ip (GstBaseTransform *base, -- GstBuffer *buf) --{ -- /* transform function is safe to call with same buffer ptr: -- */ -- return gst_stride_transform_transform (base, buf, buf); --} -diff --git a/gst/stride/gststridetransform.h b/gst/stride/gststridetransform.h -index 0141571..bce2526 100644 ---- a/gst/stride/gststridetransform.h -+++ b/gst/stride/gststridetransform.h -@@ -2,7 +2,7 @@ - * - * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/ - * -- * Description: V4L2 sink element -+ * Description: stride transform element - * Created on: Jul 2, 2009 - * Author: Rob Clark <rob@ti.com> - * -@@ -29,7 +29,6 @@ - #include <gst/video/gstvideofilter.h> - #include <gst/video/video.h> - -- - G_BEGIN_DECLS - - #define GST_TYPE_STRIDE_TRANSFORM \ -@@ -47,6 +46,19 @@ typedef struct _GstStrideTransform GstStrideTransform; - typedef struct _GstStrideTransformClass GstStrideTransformClass; - - /** -+ * stride/colorspace conversion table (used internally) -+ */ -+typedef struct { -+ -+ GstVideoFormat format[2]; /* in_format, out_format */ -+ -+ GstFlowReturn (*stridify) (GstStrideTransform *self, guchar *strided, guchar *unstrided); -+ GstFlowReturn (*unstridify) (GstStrideTransform *self, guchar *unstrided, guchar *strided); -+ -+} Conversion; -+ -+ -+/** - * GstStrideTransform: - * - * Opaque datastructure. -@@ -55,10 +67,10 @@ struct _GstStrideTransform { - GstVideoFilter videofilter; - - /*< private >*/ -- GstVideoFormat in_format, out_format; - gint width, height; - gint in_rowstride; - gint out_rowstride; -+ const Conversion *conversion; - - /* for caching the tranform_size() results.. */ - GstCaps *cached_caps[2]; --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0011-add-some-neon.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0011-add-some-neon.patch deleted file mode 100644 index 6737811..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0011-add-some-neon.patch +++ /dev/null @@ -1,293 +0,0 @@ -From 537d185b9e9b25f7dacb5e5c4dab47bb8524da34 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Thu, 8 Apr 2010 00:30:25 -0500 -Subject: [PATCH 11/24] add some neon - ---- - configure.ac | 1 + - gst/stride/Makefile.am | 1 + - gst/stride/armv7.s | 119 ++++++++++++++++++++++++++++++++++++++++++++++++ - gst/stride/convert.c | 76 ++++++++++++++++-------------- - 4 files changed, 162 insertions(+), 35 deletions(-) - create mode 100644 gst/stride/armv7.s - -diff --git a/configure.ac b/configure.ac -index af6cd52..8e7ba18 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -58,6 +58,7 @@ dnl AS_LIBTOOL_TAGS - - AC_LIBTOOL_WIN32_DLL - AM_PROG_LIBTOOL -+AM_PROG_AS - - dnl *** required versions of GStreamer stuff *** - GST_REQ=0.10.32 -diff --git a/gst/stride/Makefile.am b/gst/stride/Makefile.am -index 0b61d55..3b466de 100644 ---- a/gst/stride/Makefile.am -+++ b/gst/stride/Makefile.am -@@ -3,6 +3,7 @@ plugin_LTLIBRARIES = libgststridetransform.la - libgststridetransform_la_SOURCES = \ - gststridetransform.c \ - convert.c \ -+ armv7.s \ - plugin.c - - libgststridetransform_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) -diff --git a/gst/stride/armv7.s b/gst/stride/armv7.s -new file mode 100644 -index 0000000..ed636f7 ---- /dev/null -+++ b/gst/stride/armv7.s -@@ -0,0 +1,119 @@ -+@ GStreamer -+@ -+@ Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/ -+@ -+@ Description: NEON/VFP accelerated functions for armv7 architecture -+@ Created on: Nov 27, 2009 -+@ Author: Rob Clark <rob@ti.com> -+@ -+@ This library is free software; you can redistribute it and/or -+@ modify it under the terms of the GNU Library General Public -+@ License as published by the Free Software Foundation; either -+@ version 2 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 -+@ Library General Public License for more details. -+@ -+@ You should have received a copy of the GNU Library General Public -+@ License along with this library; if not, write to the -+@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, -+@ Boston, MA 02111-1307, USA. -+ -+ .fpu neon -+ .text -+ -+ .align -+ .global stride_copy_zip2 -+ .type stride_copy_zip2, %function -+@void -+@stride_copy_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint sz) -+@{ -+@@@@ note: r0-r3, q0-3, and q8-q15 do not need to be preserved -+stride_copy_zip2: -+@ interleave remaining >= 16 bytes: -+ pld [r1, #64] -+ pld [r2, #64] -+ cmp r3, #16 -+ blt stride_copy_zip2_2 -+stride_copy_zip2_1: -+ vld1.8 {q8}, [r1]! -+ vld1.8 {q9}, [r2]! -+ -+ vzip.8 q8, q9 -+ -+ pld [r1, #64] -+ vst1.8 {q8,q9}, [r0]! -+ pld [r2, #64] -+ sub r3, r3, #16 -+ -+ cmp r3, #16 -+ bge stride_copy_zip2_1 -+@ interleave remaining >= 8 bytes: -+stride_copy_zip2_2: -+ cmp r3, #8 -+ blt stride_copy_zip2_3 -+ -+ vld1.8 {d16}, [r1]! -+ vld1.8 {d17}, [r2]! -+ -+ vzip.8 d16, d17 -+ -+ vst1.8 {d16,d17}, [r0]! -+ sub r3, r3, #8 -+ -+@ interleave remaining < 8 bytes: -+stride_copy_zip2_3: -+@XXX -+ bx lr -+@} -+ -+ .align -+ .global stride_copy -+ .type stride_copy, %function -+@void -+@stride_copy (guchar *new_buf, guchar *orig_buf, gint sz) -+@{ -+@@@@ note: r0-r3, q0-3, and q8-q15 do not need to be preserved -+stride_copy: -+@ copy remaining >= 64 bytes: -+ pld [r1, #64] -+ cmp r2, #64 -+ blt stride_copy_2 -+stride_copy_1: -+ vld1.8 {q8-q9}, [r1]! -+ sub r2, r2, #64 -+ vld1.8 {q10-q11},[r1]! -+ vst1.8 {q8-q9}, [r0]! -+ pld [r1, #64] -+ cmp r2, #64 -+ vst1.8 {q10-q11},[r0]! -+ bge stride_copy_1 -+@ copy remaining >= 32 bytes: -+stride_copy_2: -+ cmp r2, #32 -+ blt stride_copy_3 -+ vld1.8 {q8-q9}, [r1]! -+ sub r2, r2, #32 -+ vst1.8 {q8-q9}, [r0]! -+@ copy remaining >= 16 bytes: -+stride_copy_3: -+ cmp r2, #16 -+ blt stride_copy_4 -+ vld1.8 {q8}, [r1]! -+ sub r2, r2, #16 -+ vst1.8 {q8}, [r0]! -+@ copy remaining >= 8 bytes: -+stride_copy_4: -+ cmp r2, #8 -+ blt stride_copy_5 -+ vld1.8 {d16}, [r1]! -+ sub r2, r2, #8 -+ vst1.8 {d16}, [r0]! -+@ copy remaining < 8 bytes: -+stride_copy_5: -+@XXX -+ bx lr -+@} -+ -diff --git a/gst/stride/convert.c b/gst/stride/convert.c -index 860f16c..a15063b 100644 ---- a/gst/stride/convert.c -+++ b/gst/stride/convert.c -@@ -37,38 +37,43 @@ GST_DEBUG_CATEGORY_EXTERN (stridetransform_debug); - #define GST_CAT_DEFAULT stridetransform_debug - - -+/* note: some parts of code support in-place transform.. some do not.. I'm -+ * not sure if zip/interleave functions could really support in-place copy.. -+ * I need to think about this after having some sleep ;-) -+ */ -+ -+#define WEAK __attribute__((weak)) -+ - /* - * Conversion utilities: - */ - --static void --memmove_demux (guchar *new_buf, guchar *orig_buf, gint sz, gint pxstride) -+WEAK void -+stride_copy_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint sz) - { -- if (new_buf > orig_buf) { -- /* copy backwards */ -- new_buf += ((sz - 1) * pxstride); -- orig_buf += sz - 1; -- while(sz--) { -- *new_buf = *orig_buf; -- new_buf -= pxstride; -- orig_buf--; -- } -- } else { -- while(sz--) { -- *new_buf = *orig_buf; -- new_buf += pxstride; -- orig_buf++; -- } -+ while (sz--) { -+ *new_buf++ = *orig_buf1++; -+ *new_buf++ = *orig_buf2++; - } - } - -+WEAK void -+stride_copy (guchar *new_buf, guchar *orig_buf, gint sz) -+{ -+ memcpy (new_buf, orig_buf, sz); -+} -+ -+ -+/** -+ * move to strided buffer, interleaving two planes of identical dimensions -+ */ - static void --stridemove_demux (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height, gint pxstride) -+stridemove_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint new_width, gint orig_width, gint height) - { - int row; - -- GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d", -- new_buf, orig_buf, new_width, orig_width, height); -+ GST_DEBUG ("new_buf=%p, orig_buf1=%p, orig_buf2=%p, new_width=%d, orig_width=%d, height=%d", -+ new_buf, orig_buf1, orig_buf2, new_width, orig_width, height); - - /* if increasing the stride, work from bottom-up to avoid overwriting data - * that has not been moved yet.. otherwise, work in the opposite order, -@@ -76,11 +81,19 @@ stridemove_demux (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_w - */ - if (new_width > orig_width) { - for (row=height-1; row>=0; row--) { -- memmove_demux (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width, pxstride); -+ stride_copy_zip2 ( -+ new_buf+(new_width*row), -+ orig_buf1+(orig_width*row), -+ orig_buf2+(orig_width*row), -+ orig_width); - } - } else { - for (row=0; row<height; row++) { -- memmove_demux (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width, pxstride); -+ stride_copy_zip2 ( -+ new_buf+(new_width*row), -+ orig_buf1+(orig_width*row), -+ orig_buf2+(orig_width*row), -+ new_width); - } - } - } -@@ -106,11 +119,11 @@ stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, - */ - if (new_width > orig_width) { - for (row=height-1; row>=0; row--) { -- memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width); -+ stride_copy (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width); - } - } else { - for (row=0; row<height; row++) { -- memmove (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width); -+ stride_copy (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width); - } - } - } -@@ -234,19 +247,12 @@ stridify_i420_nv12 (GstStrideTransform *self, guchar *strided, guchar *unstrided - - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); - -- /* note: if not an in-place conversion, then doing the U&V in one pass -- * would be more efficient... but if it is an in-place conversion, I'd -- * need to think about whether it is potential for the new UV plane to -- * corrupt the V plane before it is done copying.. -- */ -- stridemove_demux ( -- strided + (height*stride) + 1, -- unstrided + (int)(height*width*1.25), -- stride, width/2, height/2, 2); /* move V */ -- stridemove_demux ( -+ /* XXX widths/heights/strides that are not multiple of four??: */ -+ stridemove_zip2 ( - strided + (height*stride), - unstrided + (height*width), -- stride, width/2, height/2, 2); /* move U */ -+ unstrided + (int)(height*width*1.25), -+ stride, width/2, height/2); /* interleave U&V */ - stridemove (strided, unstrided, stride, width, height); /* move Y */ - - return GST_FLOW_OK; --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0012-add-support-to-convert-to-YUY2-YUYV-color-format.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0012-add-support-to-convert-to-YUY2-YUYV-color-format.patch deleted file mode 100644 index 1156754..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0012-add-support-to-convert-to-YUY2-YUYV-color-format.patch +++ /dev/null @@ -1,197 +0,0 @@ -From 2f3ab39353cb9dde02ba64ab89b7c7725b25ae3b Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Tue, 1 Dec 2009 22:42:43 -0600 -Subject: [PATCH 12/24] add support to convert to YUY2/YUYV color format - ---- - gst/stride/armv7.s | 63 ++++++++++++++++++++++++++++++++++++++++++ - gst/stride/convert.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++--- - 2 files changed, 133 insertions(+), 4 deletions(-) - -diff --git a/gst/stride/armv7.s b/gst/stride/armv7.s -index ed636f7..2697a14 100644 ---- a/gst/stride/armv7.s -+++ b/gst/stride/armv7.s -@@ -69,6 +69,69 @@ stride_copy_zip2_3: - bx lr - @} - -+ -+ .align -+ .global stride_copy_zip3a -+ .type stride_copy_zip3a, %function -+@void -+@stride_copy_zip3a (guchar *new_buf, -+@ guchar *orig_buf1, guchar *orig_buf2, guchar *orig_buf3, gint sz) -+@{ -+@@@@ note: r0-r3, q0-3, and q8-q15 do not need to be preserved -+stride_copy_zip3a: -+ pld [r1, #64] -+ pld [r2, #64] -+ pld [r3, #64] -+ ldr ip, [sp] @ the sz arg -+@ interleave remaining >= 32 bytes: -+ cmp ip, #32 -+ blt stride_copy_zip3a_2 -+stride_copy_zip3a_1: -+ vld1.8 {q8}, [r1]! @ Y -+ vld1.8 {q10}, [r1]! @ Y -+ vld1.8 {q9}, [r2]! @ U -+ vld1.8 {q11}, [r3]! @ V -+ -+ pld [r1, #64] -+ pld [r2, #64] -+ pld [r3, #64] -+ -+ vzip.8 q9, q11 @ interleave U&V -+ vzip.8 q8, q9 @ interleave Y1UV1 -+ vzip.8 q10, q11 @ interleave Y2UV2 -+ -+ vst1.8 {q8,q9}, [r0]! -+ vst1.8 {q10,q11}, [r0]! -+ -+ sub ip, ip, #32 -+ -+ cmp ip, #32 -+ bge stride_copy_zip3a_1 -+@ interleave remaining >= 16 bytes: -+stride_copy_zip3a_2: -+ cmp ip, #16 -+ blt stride_copy_zip3a_3 -+ -+ vld1.8 {d16}, [r1]! @ Y -+ vld1.8 {d18}, [r1]! @ Y -+ vld1.8 {d17}, [r2]! @ U -+ vld1.8 {d19}, [r3]! @ V -+ -+ vzip.8 d17, d19 @ interleave U&V -+ vzip.8 d16, d17 @ interleave Y1UV1 -+ vzip.8 d18, d19 @ interleave Y2UV2 -+ -+ vst1.8 {d16,d17}, [r0]! -+ vst1.8 {d18,d19}, [r0]! -+ -+ sub ip, ip, #16 -+@ copy remaining >= 8 bytes: -+stride_copy_zip3a_3: -+@XXX -+ bx lr -+@} -+ -+ - .align - .global stride_copy - .type stride_copy, %function -diff --git a/gst/stride/convert.c b/gst/stride/convert.c -index a15063b..0f59e78 100644 ---- a/gst/stride/convert.c -+++ b/gst/stride/convert.c -@@ -58,6 +58,19 @@ stride_copy_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint sz - } - - WEAK void -+stride_copy_zip3a (guchar *new_buf, -+ guchar *orig_buf1, guchar *orig_buf2, guchar *orig_buf3, gint sz) -+{ -+ while (sz > 1) { -+ *new_buf++ = *orig_buf1++; -+ *new_buf++ = *orig_buf2++; -+ *new_buf++ = *orig_buf1++; -+ *new_buf++ = *orig_buf3++; -+ sz -= 2; -+ } -+} -+ -+WEAK void - stride_copy (guchar *new_buf, guchar *orig_buf, gint sz) - { - memcpy (new_buf, orig_buf, sz); -@@ -99,6 +112,36 @@ stridemove_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint new - } - - /** -+ * move to strided buffer, interleaving three planes, where the first plane -+ * (orig_buf1) has 2x as many samples.. Ie. ABACABAC.. -+ */ -+static void -+stridemove_zip3a (guchar *new_buf, -+ guchar *orig_buf1, guchar *orig_buf2, guchar *orig_buf3, -+ guint new_width, gint orig_width, gint height) -+{ -+ gint copy_width = (new_width < orig_width) ? new_width : orig_width; -+ -+ while (height > 0) { -+ -+ /* even row */ -+ stride_copy_zip3a (new_buf, orig_buf1, orig_buf2, orig_buf3, copy_width); -+ new_buf += new_width; -+ orig_buf1 += orig_width; -+ -+ /* odd row, recycles same U & V */ -+ stride_copy_zip3a (new_buf, orig_buf1, orig_buf2, orig_buf3, copy_width); -+ new_buf += new_width; -+ orig_buf1 += orig_width; -+ -+ orig_buf2 += orig_width/2; -+ orig_buf3 += orig_width/2; -+ -+ height -= 2; -+ } -+} -+ -+/** - * Convert from one stride to another... like memmove, but can convert stride in - * the process. This function is not aware of pixels, only of bytes. So widths - * are given in bytes, not pixels. The new_buf and orig_buf can point to the -@@ -250,14 +293,36 @@ stridify_i420_nv12 (GstStrideTransform *self, guchar *strided, guchar *unstrided - /* XXX widths/heights/strides that are not multiple of four??: */ - stridemove_zip2 ( - strided + (height*stride), -- unstrided + (height*width), -- unstrided + (int)(height*width*1.25), -- stride, width/2, height/2); /* interleave U&V */ -- stridemove (strided, unstrided, stride, width, height); /* move Y */ -+ unstrided + (height*width), /* U */ -+ unstrided + (int)(height*width*1.25), /* V */ -+ stride, width/2, height/2); -+ stridemove (strided, unstrided, stride, width, height); /* Y */ -+ -+ return GST_FLOW_OK; -+} -+ -+/** convert I420 unstrided to YUY2 strided */ -+static GstFlowReturn -+stridify_i420_yuy2 (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->out_rowstride; -+ -+ g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ -+ /* XXX widths/heights/strides that are not multiple of four??: */ -+ stridemove_zip3a ( -+ strided, -+ unstrided, /* Y */ -+ unstrided + (height*width), /* U */ -+ unstrided + (int)(height*width*1.25), /* V */ -+ stride, width, height); - - return GST_FLOW_OK; - } - -+ - /* last entry has GST_VIDEO_FORMAT_UNKNOWN for in/out formats */ - Conversion stride_conversions[] = { - { { GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV12 }, stridify_420sp_420sp, unstridify_420sp_420sp }, -@@ -266,6 +331,7 @@ Conversion stride_conversions[] = { - { { GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YUY2 }, stridify_422i_422i, unstridify_422i_422i }, - { { GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_UYVY }, stridify_422i_422i, unstridify_422i_422i }, - { { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_NV12 }, stridify_i420_nv12, NULL }, -+ { { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUY2 }, stridify_i420_yuy2, NULL }, - /* add new entries before here */ - { { GST_VIDEO_FORMAT_UNKNOWN } } - }; --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0013-Add-support-for-RGB565-to-stridetransform.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0013-Add-support-for-RGB565-to-stridetransform.patch deleted file mode 100644 index d07c1b9..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0013-Add-support-for-RGB565-to-stridetransform.patch +++ /dev/null @@ -1,336 +0,0 @@ -From 28a5ad7c5ccfa98ffa7bb1425dc38ab16535fc26 Mon Sep 17 00:00:00 2001 -From: Castaneda Sheissa, Roberto <rsheissa@ti.com> -Date: Sun, 3 Jan 2010 13:40:30 -0600 -Subject: [PATCH 13/24] Add support for RGB565 to stridetransform - ---- - gst/stride/convert.c | 30 ++++++++++ - gst/stride/gststridetransform.c | 120 ++++++++++++++++++++------------------ - 2 files changed, 93 insertions(+), 57 deletions(-) - -diff --git a/gst/stride/convert.c b/gst/stride/convert.c -index 0f59e78..fdb02ae 100644 ---- a/gst/stride/convert.c -+++ b/gst/stride/convert.c -@@ -322,6 +322,35 @@ stridify_i420_yuy2 (GstStrideTransform *self, guchar *strided, guchar *unstrided - return GST_FLOW_OK; - } - -+/** convert RGB565 to RGB565 strided **/ -+static GstFlowReturn -+stridify_rgb565_rgb565 (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->out_rowstride; -+ -+ g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ -+ stridemove (strided, unstrided, stride, width*2, height); -+ -+ return GST_FLOW_OK; -+} -+ -+/** convert RGB565 strided to RGB565 **/ -+static GstFlowReturn -+unstridify_rgb565_rgb565 (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+{ -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->in_rowstride; -+ -+ g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ -+ stridemove (unstrided, strided, width*2, stride, height); -+ return GST_FLOW_OK; -+} -+ - - /* last entry has GST_VIDEO_FORMAT_UNKNOWN for in/out formats */ - Conversion stride_conversions[] = { -@@ -332,6 +361,7 @@ Conversion stride_conversions[] = { - { { GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_UYVY }, stridify_422i_422i, unstridify_422i_422i }, - { { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_NV12 }, stridify_i420_nv12, NULL }, - { { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUY2 }, stridify_i420_yuy2, NULL }, -+ { { GST_VIDEO_FORMAT_RGB16, GST_VIDEO_FORMAT_RGB16 }, stridify_rgb565_rgb565, unstridify_rgb565_rgb565 }, - /* add new entries before here */ - { { GST_VIDEO_FORMAT_UNKNOWN } } - }; -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index 6ab0479..c35be73 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -66,46 +66,47 @@ GST_ELEMENT_DETAILS ("Stride transform", - - - /* TODO: add rgb formats too! */ --#define SUPPORTED_CAPS \ -- GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2, UYVY, NV12 }", "[ 0, max ]") -+#define YUV_SUPPORTED_CAPS \ -+ GST_VIDEO_CAPS_YUV_STRIDED ("{I420, YV12, YUY2, UYVY, NV12 }", "[ 0, max ]") - -+#define RGB_SUPPORTED_CAPS \ -+ GST_VIDEO_CAPS_RGB_16_STRIDED ("[ 0, max ]") - --static GstStaticPadTemplate src_template = --GST_STATIC_PAD_TEMPLATE ("src", -+ -+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, -- GST_STATIC_CAPS (SUPPORTED_CAPS) --); -+ GST_STATIC_CAPS (YUV_SUPPORTED_CAPS ";" RGB_SUPPORTED_CAPS) -+ ); - --static GstStaticPadTemplate sink_template = --GST_STATIC_PAD_TEMPLATE ("sink", -+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, -- GST_STATIC_CAPS (SUPPORTED_CAPS) --); -+ GST_STATIC_CAPS (YUV_SUPPORTED_CAPS ";" RGB_SUPPORTED_CAPS) -+ ); - - - GST_DEBUG_CATEGORY (stridetransform_debug); - #define GST_CAT_DEFAULT stridetransform_debug - - /* type functions */ --static void gst_stride_transform_dispose (GObject *obj); -+static void gst_stride_transform_dispose (GObject * obj); - - /* GstBaseTransform functions */ --static gboolean gst_stride_transform_get_unit_size (GstBaseTransform *base, -- GstCaps *caps, guint *size); --static gboolean gst_stride_transform_transform_size (GstBaseTransform *base, -+static gboolean gst_stride_transform_get_unit_size (GstBaseTransform * base, -+ GstCaps * caps, guint * size); -+static gboolean gst_stride_transform_transform_size (GstBaseTransform * base, - GstPadDirection direction, -- GstCaps *caps, guint size, -- GstCaps *othercaps, guint *othersize); --static GstCaps *gst_stride_transform_transform_caps (GstBaseTransform *base, -- GstPadDirection direction, GstCaps *caps); --static gboolean gst_stride_transform_set_caps (GstBaseTransform *base, -- GstCaps *incaps, GstCaps *outcaps); --static GstFlowReturn gst_stride_transform_transform (GstBaseTransform *base, -- GstBuffer *inbuf, GstBuffer *outbuf); -+ GstCaps * caps, guint size, GstCaps * othercaps, guint * othersize); -+static GstCaps *gst_stride_transform_transform_caps (GstBaseTransform * base, -+ GstPadDirection direction, GstCaps * caps); -+static gboolean gst_stride_transform_set_caps (GstBaseTransform * base, -+ GstCaps * incaps, GstCaps * outcaps); -+static GstFlowReturn gst_stride_transform_transform (GstBaseTransform * base, -+ GstBuffer * inbuf, GstBuffer * outbuf); - --GST_BOILERPLATE (GstStrideTransform, gst_stride_transform, GstVideoFilter, GST_TYPE_VIDEO_FILTER); -+GST_BOILERPLATE (GstStrideTransform, gst_stride_transform, GstVideoFilter, -+ GST_TYPE_VIDEO_FILTER); - - - static void -@@ -113,7 +114,8 @@ gst_stride_transform_base_init (gpointer g_class) - { - GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class); - -- GST_DEBUG_CATEGORY_INIT (stridetransform_debug, "stride", 0, "stride transform element"); -+ GST_DEBUG_CATEGORY_INIT (stridetransform_debug, "stride", 0, -+ "stride transform element"); - - gst_element_class_set_details (gstelement_class, &stridetransform_details); - -@@ -124,7 +126,7 @@ gst_stride_transform_base_init (gpointer g_class) - } - - static void --gst_stride_transform_class_init (GstStrideTransformClass *klass) -+gst_stride_transform_class_init (GstStrideTransformClass * klass) - { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GstBaseTransformClass *basetransform_class = GST_BASE_TRANSFORM_CLASS (klass); -@@ -146,14 +148,15 @@ gst_stride_transform_class_init (GstStrideTransformClass *klass) - } - - static void --gst_stride_transform_init (GstStrideTransform *self, GstStrideTransformClass *klass) -+gst_stride_transform_init (GstStrideTransform * self, -+ GstStrideTransformClass * klass) - { - GST_DEBUG_OBJECT (self, "not implemented"); - } - - - static void --gst_stride_transform_dispose (GObject *object) -+gst_stride_transform_dispose (GObject * object) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (object); - GST_DEBUG_OBJECT (self, "not implemented"); -@@ -164,15 +167,15 @@ gst_stride_transform_dispose (GObject *object) - * figure out the required buffer size based on @caps - */ - static gboolean --gst_stride_transform_get_unit_size (GstBaseTransform *base, -- GstCaps *caps, guint *size) -+gst_stride_transform_get_unit_size (GstBaseTransform * base, -+ GstCaps * caps, guint * size) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); - GstVideoFormat format; - gint width, height, rowstride; - -- g_return_val_if_fail (gst_video_format_parse_caps_strided ( -- caps, &format, &width, &height, &rowstride), FALSE); -+ g_return_val_if_fail (gst_video_format_parse_caps_strided (caps, &format, -+ &width, &height, &rowstride), FALSE); - - *size = gst_video_format_get_size_strided (format, width, height, rowstride); - -@@ -188,16 +191,14 @@ gst_stride_transform_get_unit_size (GstBaseTransform *base, - * buffer size is a multiple of the unit size.. which doesn't hold true. - */ - static gboolean --gst_stride_transform_transform_size (GstBaseTransform *base, -+gst_stride_transform_transform_size (GstBaseTransform * base, - GstPadDirection direction, -- GstCaps *caps, guint size, -- GstCaps *othercaps, guint *othersize) -+ GstCaps * caps, guint size, GstCaps * othercaps, guint * othersize) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); - guint idx = (direction == GST_PAD_SINK) ? 0 : 1; - -- if (self->cached_caps[idx] != othercaps) -- { -+ if (self->cached_caps[idx] != othercaps) { - guint sz; - if (!gst_stride_transform_get_unit_size (base, othercaps, &sz)) { - return FALSE; -@@ -220,13 +221,15 @@ gst_stride_transform_transform_size (GstBaseTransform *base, - * helper to add all fields, other than rowstride to @caps, copied from @s. - */ - static void --add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rowstride, GstPadDirection direction) -+add_all_fields (GstCaps * caps, const gchar * name, GstStructure * s, -+ gboolean rowstride, GstPadDirection direction) - { - gint idx; - GstStructure *new_s = gst_structure_new (name, NULL); - - if (rowstride) { -- gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); -+ gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, -+ NULL); - } - - idx = gst_structure_n_fields (s) - 1; -@@ -245,15 +248,16 @@ add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rows - gint from_format = (direction == GST_PAD_SRC) ? 1 : 0; - - if (gst_structure_get_fourcc (s, "format", &fourcc)) { -- GValue formats = {0}; -- GValue fourccval = {0}; -+ GValue formats = { 0 }; -+ GValue fourccval = { 0 }; - gint i; - GstVideoFormat format = gst_video_format_from_fourcc (fourcc); - - g_value_init (&formats, GST_TYPE_LIST); - g_value_init (&fourccval, GST_TYPE_FOURCC); - -- for (i=0; stride_conversions[i].format[0]!=GST_VIDEO_FORMAT_UNKNOWN; i++) { -+ for (i = 0; stride_conversions[i].format[0] != GST_VIDEO_FORMAT_UNKNOWN; -+ i++) { - if (stride_conversions[i].format[from_format] == format) { - gst_value_set_fourcc (&fourccval, gst_video_format_to_fourcc - (stride_conversions[i].format[to_format])); -@@ -281,8 +285,8 @@ add_all_fields (GstCaps *caps, const gchar *name, GstStructure *s, gboolean rows - * identical parameters - */ - static GstCaps * --gst_stride_transform_transform_caps (GstBaseTransform *base, -- GstPadDirection direction, GstCaps *caps) -+gst_stride_transform_transform_caps (GstBaseTransform * base, -+ GstPadDirection direction, GstCaps * caps) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); - GstCaps *ret; -@@ -321,8 +325,8 @@ gst_stride_transform_transform_caps (GstBaseTransform *base, - * plus the requested rowstride of the @incaps and @outcaps - */ - static gboolean --gst_stride_transform_set_caps (GstBaseTransform *base, -- GstCaps *incaps, GstCaps *outcaps) -+gst_stride_transform_set_caps (GstBaseTransform * base, -+ GstCaps * incaps, GstCaps * outcaps) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); - gint width, height; -@@ -333,13 +337,13 @@ gst_stride_transform_set_caps (GstBaseTransform *base, - LOG_CAPS (self, outcaps); - - g_return_val_if_fail (gst_video_format_parse_caps_strided (incaps, -- &in_format, &self->width, &self->height, &self->in_rowstride), FALSE); -+ &in_format, &self->width, &self->height, &self->in_rowstride), FALSE); - g_return_val_if_fail (gst_video_format_parse_caps_strided (outcaps, -- &out_format, &width, &height, &self->out_rowstride), FALSE); -+ &out_format, &width, &height, &self->out_rowstride), FALSE); - - self->conversion = NULL; - -- for (i=0; stride_conversions[i].format[0]!=GST_VIDEO_FORMAT_UNKNOWN; i++) { -+ for (i = 0; stride_conversions[i].format[0] != GST_VIDEO_FORMAT_UNKNOWN; i++) { - if ((stride_conversions[i].format[0] == in_format) && - (stride_conversions[i].format[1] == out_format)) { - GST_DEBUG_OBJECT (self, "found stride_conversion: %d", i); -@@ -349,26 +353,27 @@ gst_stride_transform_set_caps (GstBaseTransform *base, - } - - g_return_val_if_fail (self->conversion, FALSE); -- g_return_val_if_fail (self->conversion->unstridify || !self->in_rowstride, FALSE); -- g_return_val_if_fail (self->conversion->stridify || !self->out_rowstride, FALSE); -- g_return_val_if_fail (self->width == width, FALSE); -+ g_return_val_if_fail (self->conversion->unstridify -+ || !self->in_rowstride, FALSE); -+ g_return_val_if_fail (self->conversion->stridify -+ || !self->out_rowstride, FALSE); -+ g_return_val_if_fail (self->width == width, FALSE); - g_return_val_if_fail (self->height == height, FALSE); - - return TRUE; - } - - static GstFlowReturn --gst_stride_transform_transform (GstBaseTransform *base, -- GstBuffer *inbuf, GstBuffer *outbuf) -+gst_stride_transform_transform (GstBaseTransform * base, -+ GstBuffer * inbuf, GstBuffer * outbuf) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); - - GST_DEBUG_OBJECT (self, "inbuf=%p (size=%d), outbuf=%p (size=%d)", -- inbuf, GST_BUFFER_SIZE (inbuf), -- outbuf, GST_BUFFER_SIZE (outbuf)); -+ inbuf, GST_BUFFER_SIZE (inbuf), outbuf, GST_BUFFER_SIZE (outbuf)); - - if (self->in_rowstride && self->out_rowstride) { -- GST_DEBUG_OBJECT (self, "not implemented"); // TODO -+ GST_DEBUG_OBJECT (self, "not implemented"); // TODO - return GST_FLOW_ERROR; - } else if (self->in_rowstride) { - return self->conversion->unstridify (self, -@@ -378,7 +383,8 @@ gst_stride_transform_transform (GstBaseTransform *base, - GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf)); - } - -- GST_DEBUG_OBJECT (self, "this shouldn't happen! in_rowstride=%d, out_rowstride=%d", -+ GST_DEBUG_OBJECT (self, -+ "this shouldn't happen! in_rowstride=%d, out_rowstride=%d", - self->in_rowstride, self->out_rowstride); - - return GST_FLOW_ERROR; --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0014-stridetransform-updates-for-new-extra-anal-compiler-.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0014-stridetransform-updates-for-new-extra-anal-compiler-.patch deleted file mode 100644 index 4e60f32..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0014-stridetransform-updates-for-new-extra-anal-compiler-.patch +++ /dev/null @@ -1,61 +0,0 @@ -From e97373aac252f312c5ac69305228db50886a7c5c Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Thu, 8 Apr 2010 03:30:35 -0500 -Subject: [PATCH 14/24] stridetransform: updates for new extra-anal compiler warning flags - ---- - gst/stride/convert.c | 6 ++++++ - gst/stride/gststridetransform.c | 13 ++++--------- - 2 files changed, 10 insertions(+), 9 deletions(-) - -diff --git a/gst/stride/convert.c b/gst/stride/convert.c -index fdb02ae..ad9c0aa 100644 ---- a/gst/stride/convert.c -+++ b/gst/stride/convert.c -@@ -48,6 +48,12 @@ GST_DEBUG_CATEGORY_EXTERN (stridetransform_debug); - * Conversion utilities: - */ - -+void stride_copy_zip2 (guchar * new_buf, guchar * orig_buf1, -+ guchar * orig_buf2, gint sz); -+void stride_copy_zip3a (guchar * new_buf, guchar * orig_buf1, -+ guchar * orig_buf2, guchar * orig_buf3, gint sz); -+void stride_copy (guchar * new_buf, guchar * orig_buf, gint sz); -+ - WEAK void - stride_copy_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint sz) - { -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index c35be73..de07c11 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -57,14 +57,6 @@ - /* last entry has GST_VIDEO_FORMAT_UNKNOWN for in/out formats */ - extern const Conversion stride_conversions[]; - -- --static const GstElementDetails stridetransform_details = --GST_ELEMENT_DETAILS ("Stride transform", -- "Filter/Converter/Video", -- "Convert between video buffers with and without stride, or with differing stride", -- "Rob Clark <rob@ti.com>,"); -- -- - /* TODO: add rgb formats too! */ - #define YUV_SUPPORTED_CAPS \ - GST_VIDEO_CAPS_YUV_STRIDED ("{I420, YV12, YUY2, UYVY, NV12 }", "[ 0, max ]") -@@ -117,7 +109,10 @@ gst_stride_transform_base_init (gpointer g_class) - GST_DEBUG_CATEGORY_INIT (stridetransform_debug, "stride", 0, - "stride transform element"); - -- gst_element_class_set_details (gstelement_class, &stridetransform_details); -+ gst_element_class_set_details_simple (gstelement_class, -+ "Stride transform", "Filter/Converter/Video", -+ "Convert between video buffers with and without stride, or with differing stride", -+ "Rob Clark <rob@ti.com>,"); - - gst_element_class_add_pad_template (gstelement_class, - gst_static_pad_template_get (&sink_template)); --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0015-stridetransform-fix-problem-transforming-caps-with-l.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0015-stridetransform-fix-problem-transforming-caps-with-l.patch deleted file mode 100644 index 0d757d9..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0015-stridetransform-fix-problem-transforming-caps-with-l.patch +++ /dev/null @@ -1,544 +0,0 @@ -From c8db3522e32ca6afbbd117b816068516eed8c594 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Sat, 30 Jan 2010 14:32:42 -0600 -Subject: [PATCH 15/24] stridetransform: fix problem transforming caps with list of fourcc's - -previous logic assumed that the format field would contain just a single fourcc ---- - gst/stride/convert.c | 206 ++++++++++++++++++++------------------- - gst/stride/gststridetransform.c | 78 +++++++++++----- - 2 files changed, 159 insertions(+), 125 deletions(-) - -diff --git a/gst/stride/convert.c b/gst/stride/convert.c -index ad9c0aa..17f9e2a 100644 ---- a/gst/stride/convert.c -+++ b/gst/stride/convert.c -@@ -55,7 +55,8 @@ void stride_copy_zip3a (guchar * new_buf, guchar * orig_buf1, - void stride_copy (guchar * new_buf, guchar * orig_buf, gint sz); - - WEAK void --stride_copy_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint sz) -+stride_copy_zip2 (guchar * new_buf, guchar * orig_buf1, guchar * orig_buf2, -+ gint sz) - { - while (sz--) { - *new_buf++ = *orig_buf1++; -@@ -64,8 +65,8 @@ stride_copy_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint sz - } - - WEAK void --stride_copy_zip3a (guchar *new_buf, -- guchar *orig_buf1, guchar *orig_buf2, guchar *orig_buf3, gint sz) -+stride_copy_zip3a (guchar * new_buf, -+ guchar * orig_buf1, guchar * orig_buf2, guchar * orig_buf3, gint sz) - { - while (sz > 1) { - *new_buf++ = *orig_buf1++; -@@ -77,7 +78,7 @@ stride_copy_zip3a (guchar *new_buf, - } - - WEAK void --stride_copy (guchar *new_buf, guchar *orig_buf, gint sz) -+stride_copy (guchar * new_buf, guchar * orig_buf, gint sz) - { - memcpy (new_buf, orig_buf, sz); - } -@@ -87,11 +88,13 @@ stride_copy (guchar *new_buf, guchar *orig_buf, gint sz) - * move to strided buffer, interleaving two planes of identical dimensions - */ - static void --stridemove_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint new_width, gint orig_width, gint height) -+stridemove_zip2 (guchar * new_buf, guchar * orig_buf1, guchar * orig_buf2, -+ gint new_width, gint orig_width, gint height) - { - int row; - -- GST_DEBUG ("new_buf=%p, orig_buf1=%p, orig_buf2=%p, new_width=%d, orig_width=%d, height=%d", -+ GST_DEBUG -+ ("new_buf=%p, orig_buf1=%p, orig_buf2=%p, new_width=%d, orig_width=%d, height=%d", - new_buf, orig_buf1, orig_buf2, new_width, orig_width, height); - - /* if increasing the stride, work from bottom-up to avoid overwriting data -@@ -99,20 +102,16 @@ stridemove_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint new - * for the same reason. - */ - if (new_width > orig_width) { -- for (row=height-1; row>=0; row--) { -- stride_copy_zip2 ( -- new_buf+(new_width*row), -- orig_buf1+(orig_width*row), -- orig_buf2+(orig_width*row), -- orig_width); -+ for (row = height - 1; row >= 0; row--) { -+ stride_copy_zip2 (new_buf + (new_width * row), -+ orig_buf1 + (orig_width * row), -+ orig_buf2 + (orig_width * row), orig_width); - } - } else { -- for (row=0; row<height; row++) { -- stride_copy_zip2 ( -- new_buf+(new_width*row), -- orig_buf1+(orig_width*row), -- orig_buf2+(orig_width*row), -- new_width); -+ for (row = 0; row < height; row++) { -+ stride_copy_zip2 (new_buf + (new_width * row), -+ orig_buf1 + (orig_width * row), -+ orig_buf2 + (orig_width * row), new_width); - } - } - } -@@ -122,8 +121,8 @@ stridemove_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint new - * (orig_buf1) has 2x as many samples.. Ie. ABACABAC.. - */ - static void --stridemove_zip3a (guchar *new_buf, -- guchar *orig_buf1, guchar *orig_buf2, guchar *orig_buf3, -+stridemove_zip3a (guchar * new_buf, -+ guchar * orig_buf1, guchar * orig_buf2, guchar * orig_buf3, - guint new_width, gint orig_width, gint height) - { - gint copy_width = (new_width < orig_width) ? new_width : orig_width; -@@ -140,8 +139,8 @@ stridemove_zip3a (guchar *new_buf, - new_buf += new_width; - orig_buf1 += orig_width; - -- orig_buf2 += orig_width/2; -- orig_buf3 += orig_width/2; -+ orig_buf2 += orig_width / 2; -+ orig_buf3 += orig_width / 2; - - height -= 2; - } -@@ -155,7 +154,8 @@ stridemove_zip3a (guchar *new_buf, - * enough. - */ - static void --stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, gint height) -+stridemove (guchar * new_buf, guchar * orig_buf, gint new_width, -+ gint orig_width, gint height) - { - int row; - -@@ -167,12 +167,14 @@ stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, - * for the same reason. - */ - if (new_width > orig_width) { -- for (row=height-1; row>=0; row--) { -- stride_copy (new_buf+(new_width*row), orig_buf+(orig_width*row), orig_width); -+ for (row = height - 1; row >= 0; row--) { -+ stride_copy (new_buf + (new_width * row), orig_buf + (orig_width * row), -+ orig_width); - } - } else { -- for (row=0; row<height; row++) { -- stride_copy (new_buf+(new_width*row), orig_buf+(orig_width*row), new_width); -+ for (row = 0; row < height; row++) { -+ stride_copy (new_buf + (new_width * row), orig_buf + (orig_width * row), -+ new_width); - } - } - } -@@ -183,9 +185,10 @@ stridemove (guchar *new_buf, guchar *orig_buf, gint new_width, gint orig_width, - - /** convert 4:2:0 semiplanar to same 4:2:0 semiplanar */ - static GstFlowReturn --unstridify_420sp_420sp (GstStrideTransform *self, guchar *unstrided, guchar *strided) -+unstridify_420sp_420sp (GstStrideTransform * self, guchar * unstrided, -+ guchar * strided) - { -- gint width = self->width; -+ gint width = self->width; - gint height = self->height; - gint stride = self->in_rowstride; - -@@ -196,10 +199,12 @@ unstridify_420sp_420sp (GstStrideTransform *self, guchar *unstrided, guchar *str - - return GST_FLOW_OK; - } -+ - static GstFlowReturn --stridify_420sp_420sp (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+stridify_420sp_420sp (GstStrideTransform * self, guchar * strided, -+ guchar * unstrided) - { -- gint width = self->width; -+ gint width = self->width; - gint height = self->height; - gint stride = self->out_rowstride; - -@@ -214,115 +219,107 @@ stridify_420sp_420sp (GstStrideTransform *self, guchar *strided, guchar *unstrid - - /** convert 4:2:0 planar to same 4:2:0 planar */ - static GstFlowReturn --unstridify_420p_420p (GstStrideTransform *self, guchar *unstrided, guchar *strided) -+unstridify_420p_420p (GstStrideTransform * self, guchar * unstrided, -+ guchar * strided) - { -- gint width = self->width; -+ gint width = self->width; - gint height = self->height; - gint stride = self->in_rowstride; - - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); - -- stridemove (unstrided, strided, width, stride, height); /* move Y */ -- stridemove ( -- unstrided + (height*width), -- strided + (height*stride), -- width/2, stride, height); /* move V/U */ -+ stridemove (unstrided, strided, width, stride, height); /* move Y */ -+ stridemove (unstrided + (height * width), strided + (height * stride), width / 2, stride, height); /* move V/U */ - /* XXX odd widths/heights/strides: */ -- stridemove ( -- unstrided + (int)(height*width*1.5), -- strided + (int)(height*stride*1.5), -- width/2, stride, height); /* move U/V */ -+ stridemove (unstrided + (int) (height * width * 1.5), strided + (int) (height * stride * 1.5), width / 2, stride, height); /* move U/V */ - - return GST_FLOW_OK; - } -+ - static GstFlowReturn --stridify_420p_420p (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+stridify_420p_420p (GstStrideTransform * self, guchar * strided, -+ guchar * unstrided) - { -- gint width = self->width; -+ gint width = self->width; - gint height = self->height; - gint stride = self->out_rowstride; - - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); - - /* XXX odd widths/heights/strides: */ -- stridemove ( -- strided + (int)(height*stride*1.5), -- unstrided + (int)(height*width*1.5), -- stride, width/2, height); /* move U/V */ -- stridemove ( -- strided + (height*stride), -- unstrided + (height*width), -- stride, width/2, height); /* move V/U */ -- stridemove (strided, unstrided, stride, width, height); /* move Y */ -+ stridemove (strided + (int) (height * stride * 1.5), unstrided + (int) (height * width * 1.5), stride, width / 2, height); /* move U/V */ -+ stridemove (strided + (height * stride), unstrided + (height * width), stride, width / 2, height); /* move V/U */ -+ stridemove (strided, unstrided, stride, width, height); /* move Y */ - - return GST_FLOW_OK; - } - - /** convert 4:2:2 packed to same 4:2:2 packed */ - static GstFlowReturn --unstridify_422i_422i (GstStrideTransform *self, guchar *unstrided, guchar *strided) -+unstridify_422i_422i (GstStrideTransform * self, guchar * unstrided, -+ guchar * strided) - { -- gint width = self->width; -+ gint width = self->width; - gint height = self->height; - gint stride = self->in_rowstride; - -- g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ g_return_val_if_fail (stride >= (width * 2), GST_FLOW_ERROR); - -- stridemove (unstrided, strided, width*2, stride, height); -+ stridemove (unstrided, strided, width * 2, stride, height); - - return GST_FLOW_OK; - } -+ - static GstFlowReturn --stridify_422i_422i (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+stridify_422i_422i (GstStrideTransform * self, guchar * strided, -+ guchar * unstrided) - { -- gint width = self->width; -+ gint width = self->width; - gint height = self->height; - gint stride = self->out_rowstride; - -- g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ g_return_val_if_fail (stride >= (width * 2), GST_FLOW_ERROR); - -- stridemove (strided, unstrided, stride, width*2, height); -+ stridemove (strided, unstrided, stride, width * 2, height); - - return GST_FLOW_OK; - } - - /** convert I420 unstrided to NV12 strided */ - static GstFlowReturn --stridify_i420_nv12 (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+stridify_i420_nv12 (GstStrideTransform * self, guchar * strided, -+ guchar * unstrided) - { -- gint width = self->width; -+ gint width = self->width; - gint height = self->height; - gint stride = self->out_rowstride; - - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); - - /* XXX widths/heights/strides that are not multiple of four??: */ -- stridemove_zip2 ( -- strided + (height*stride), -- unstrided + (height*width), /* U */ -- unstrided + (int)(height*width*1.25), /* V */ -- stride, width/2, height/2); -- stridemove (strided, unstrided, stride, width, height); /* Y */ -+ stridemove_zip2 (strided + (height * stride), unstrided + (height * width), /* U */ -+ unstrided + (int) (height * width * 1.25), /* V */ -+ stride, width / 2, height / 2); -+ stridemove (strided, unstrided, stride, width, height); /* Y */ - - return GST_FLOW_OK; - } - - /** convert I420 unstrided to YUY2 strided */ - static GstFlowReturn --stridify_i420_yuy2 (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+stridify_i420_yuy2 (GstStrideTransform * self, guchar * strided, -+ guchar * unstrided) - { -- gint width = self->width; -+ gint width = self->width; - gint height = self->height; - gint stride = self->out_rowstride; - - g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); - - /* XXX widths/heights/strides that are not multiple of four??: */ -- stridemove_zip3a ( -- strided, -- unstrided, /* Y */ -- unstrided + (height*width), /* U */ -- unstrided + (int)(height*width*1.25), /* V */ -+ stridemove_zip3a (strided, unstrided, /* Y */ -+ unstrided + (height * width), /* U */ -+ unstrided + (int) (height * width * 1.25), /* V */ - stride, width, height); - - return GST_FLOW_OK; -@@ -330,46 +327,51 @@ stridify_i420_yuy2 (GstStrideTransform *self, guchar *strided, guchar *unstrided - - /** convert RGB565 to RGB565 strided **/ - static GstFlowReturn --stridify_rgb565_rgb565 (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+stridify_rgb565_rgb565 (GstStrideTransform * self, guchar * strided, -+ guchar * unstrided) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->out_rowstride; -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->out_rowstride; - -- g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ g_return_val_if_fail (stride >= (width * 2), GST_FLOW_ERROR); - -- stridemove (strided, unstrided, stride, width*2, height); -+ stridemove (strided, unstrided, stride, width * 2, height); - -- return GST_FLOW_OK; -+ return GST_FLOW_OK; - } - - /** convert RGB565 strided to RGB565 **/ - static GstFlowReturn --unstridify_rgb565_rgb565 (GstStrideTransform *self, guchar *strided, guchar *unstrided) -+unstridify_rgb565_rgb565 (GstStrideTransform * self, guchar * strided, -+ guchar * unstrided) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->in_rowstride; -+ gint width = self->width; -+ gint height = self->height; -+ gint stride = self->in_rowstride; - -- g_return_val_if_fail (stride >= (width*2), GST_FLOW_ERROR); -+ g_return_val_if_fail (stride >= (width * 2), GST_FLOW_ERROR); - -- stridemove (unstrided, strided, width*2, stride, height); -- return GST_FLOW_OK; -+ stridemove (unstrided, strided, width * 2, stride, height); -+ return GST_FLOW_OK; - } - -+#define CONVERT(tofmt, fromfmt, stridify, unstridify) \ -+ { \ -+ { GST_VIDEO_FORMAT_##tofmt, GST_VIDEO_FORMAT_##fromfmt }, \ -+ stridify, unstridify \ -+ } - - /* last entry has GST_VIDEO_FORMAT_UNKNOWN for in/out formats */ --Conversion stride_conversions[] = { -- { { GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_NV12 }, stridify_420sp_420sp, unstridify_420sp_420sp }, -- { { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_I420 }, stridify_420p_420p, unstridify_420p_420p }, -- { { GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YV12 }, stridify_420p_420p, unstridify_420p_420p }, -- { { GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YUY2 }, stridify_422i_422i, unstridify_422i_422i }, -- { { GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_UYVY }, stridify_422i_422i, unstridify_422i_422i }, -- { { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_NV12 }, stridify_i420_nv12, NULL }, -- { { GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUY2 }, stridify_i420_yuy2, NULL }, -- { { GST_VIDEO_FORMAT_RGB16, GST_VIDEO_FORMAT_RGB16 }, stridify_rgb565_rgb565, unstridify_rgb565_rgb565 }, -+const Conversion stride_conversions[] = { -+ CONVERT (NV12, NV12, stridify_420sp_420sp, unstridify_420sp_420sp), -+ CONVERT (I420, I420, stridify_420p_420p, unstridify_420p_420p), -+ CONVERT (YV12, YV12, stridify_420p_420p, unstridify_420p_420p), -+ CONVERT (YUY2, YUY2, stridify_422i_422i, unstridify_422i_422i), -+ CONVERT (UYVY, UYVY, stridify_422i_422i, unstridify_422i_422i), -+ CONVERT (I420, NV12, stridify_i420_nv12, NULL), -+ CONVERT (I420, YUY2, stridify_i420_yuy2, NULL), -+ CONVERT (RGB16, RGB16, stridify_rgb565_rgb565, unstridify_rgb565_rgb565), - /* add new entries before here */ -- { { GST_VIDEO_FORMAT_UNKNOWN } } -+ {{GST_VIDEO_FORMAT_UNKNOWN}} - }; -- -- -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index de07c11..4469e7f 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -146,7 +146,9 @@ static void - gst_stride_transform_init (GstStrideTransform * self, - GstStrideTransformClass * klass) - { -- GST_DEBUG_OBJECT (self, "not implemented"); -+ GST_DEBUG_OBJECT (self, "ENTER"); -+ self->cached_caps[0] = NULL; -+ self->cached_caps[1] = NULL; - } - - -@@ -154,7 +156,7 @@ static void - gst_stride_transform_dispose (GObject * object) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (object); -- GST_DEBUG_OBJECT (self, "not implemented"); -+ GST_DEBUG_OBJECT (self, "ENTER"); - G_OBJECT_CLASS (parent_class)->dispose (object); - } - -@@ -210,7 +212,30 @@ gst_stride_transform_transform_size (GstBaseTransform * base, - return TRUE; - } - -+/** -+ * helper to check possible @fourcc conversions to the list @formats -+ */ -+static void -+add_all_fourcc_conversions (GValue * formats, guint32 fourcc, -+ GstPadDirection direction) -+{ -+ gint to_format = (direction == GST_PAD_SINK) ? 1 : 0; -+ gint from_format = (direction == GST_PAD_SRC) ? 1 : 0; -+ GValue fourccval = { 0 }; -+ gint i; -+ GstVideoFormat format = gst_video_format_from_fourcc (fourcc); - -+ g_value_init (&fourccval, GST_TYPE_FOURCC); -+ -+ for (i = 0; stride_conversions[i].format[0] != GST_VIDEO_FORMAT_UNKNOWN; i++) { -+ if (stride_conversions[i].format[from_format] == format) { -+ guint result_fourcc = -+ gst_video_format_to_fourcc (stride_conversions[i].format[to_format]); -+ gst_value_set_fourcc (&fourccval, result_fourcc); -+ gst_value_list_append_value (formats, &fourccval); -+ } -+ } -+} - - /** - * helper to add all fields, other than rowstride to @caps, copied from @s. -@@ -230,43 +255,44 @@ add_all_fields (GstCaps * caps, const gchar * name, GstStructure * s, - idx = gst_structure_n_fields (s) - 1; - while (idx >= 0) { - const gchar *name = gst_structure_nth_field_name (s, idx); -+ const GValue *val = gst_structure_get_value (s, name); -+ - idx--; - - /* for format field, check the stride_conversions table to see what - * we can support: - */ - if (!strcmp ("format", name)) { -- guint fourcc; -+ GValue formats = { 0 }; - -- /* XXX double check this: */ -- gint to_format = (direction == GST_PAD_SINK) ? 1 : 0; -- gint from_format = (direction == GST_PAD_SRC) ? 1 : 0; -+ g_value_init (&formats, GST_TYPE_LIST); - -- if (gst_structure_get_fourcc (s, "format", &fourcc)) { -- GValue formats = { 0 }; -- GValue fourccval = { 0 }; -+ if (GST_VALUE_HOLDS_FOURCC (val)) { -+ add_all_fourcc_conversions (&formats, -+ gst_value_get_fourcc (val), direction); -+ } else if (GST_VALUE_HOLDS_LIST (val)) { - gint i; -- GstVideoFormat format = gst_video_format_from_fourcc (fourcc); -- -- g_value_init (&formats, GST_TYPE_LIST); -- g_value_init (&fourccval, GST_TYPE_FOURCC); -- -- for (i = 0; stride_conversions[i].format[0] != GST_VIDEO_FORMAT_UNKNOWN; -- i++) { -- if (stride_conversions[i].format[from_format] == format) { -- gst_value_set_fourcc (&fourccval, gst_video_format_to_fourcc -- (stride_conversions[i].format[to_format])); -- gst_value_list_append_value (&formats, &fourccval); -+ for (i = 0; i < gst_value_list_get_size (val); i++) { -+ const GValue *list_val = gst_value_list_get_value (val, i); -+ if (GST_VALUE_HOLDS_FOURCC (list_val)) { -+ add_all_fourcc_conversions (&formats, -+ gst_value_get_fourcc (list_val), direction); -+ } else { -+ GST_WARNING ("malformed caps!!"); -+ break; - } - } -- -- continue; -+ } else { -+ GST_WARNING ("malformed caps!!"); - } -+ -+ gst_structure_set_value (new_s, "format", &formats); -+ -+ continue; - } - - /* copy over all other non-rowstride fields: */ - if (strcmp ("rowstride", name)) { -- const GValue *val = gst_structure_get_value (s, name); - gst_structure_set_value (new_s, name, val); - } - } -@@ -347,6 +373,10 @@ gst_stride_transform_set_caps (GstBaseTransform * base, - } - } - -+ GST_DEBUG_OBJECT (self, -+ "conversion[%d]=%p, in_rowstride=%d, out_rowstride=%d", -+ i, self->conversion, self->in_rowstride, self->out_rowstride); -+ - g_return_val_if_fail (self->conversion, FALSE); - g_return_val_if_fail (self->conversion->unstridify - || !self->in_rowstride, FALSE); -@@ -355,6 +385,8 @@ gst_stride_transform_set_caps (GstBaseTransform * base, - g_return_val_if_fail (self->width == width, FALSE); - g_return_val_if_fail (self->height == height, FALSE); - -+ GST_DEBUG_OBJECT (self, "caps are ok"); -+ - return TRUE; - } - --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0016-modify-playbin-to-use-stridetransform.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0016-modify-playbin-to-use-stridetransform.patch deleted file mode 100644 index 82c9b25..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0016-modify-playbin-to-use-stridetransform.patch +++ /dev/null @@ -1,62 +0,0 @@ -From eb2753337944d24419dc13968137bf06a5e8f77c Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Sat, 6 Feb 2010 22:10:16 -0600 -Subject: [PATCH 16/24] modify playbin to use stridetransform - ---- - gst/playback/gstplaysink.c | 29 ++++------------------------- - 1 files changed, 4 insertions(+), 25 deletions(-) - -diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c -index bb41a03..dedd3be 100644 ---- a/gst/playback/gstplaysink.c -+++ b/gst/playback/gstplaysink.c -@@ -1267,13 +1267,13 @@ gen_video_chain (GstPlaySink * playsink, gboolean raw, gboolean async) - } - - if (raw && !(playsink->flags & GST_PLAY_FLAG_NATIVE_VIDEO)) { -- GST_DEBUG_OBJECT (playsink, "creating ffmpegcolorspace"); -- chain->conv = gst_element_factory_make ("ffmpegcolorspace", "vconv"); -+ GST_DEBUG_OBJECT (playsink, "creating stridetransform"); -+ chain->conv = gst_element_factory_make ("stridetransform", "vconv"); - if (chain->conv == NULL) { -- post_missing_element_message (playsink, "ffmpegcolorspace"); -+ post_missing_element_message (playsink, "stridetransform"); - GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN, - (_("Missing element '%s' - check your GStreamer installation."), -- "ffmpegcolorspace"), ("video rendering might fail")); -+ "stridetransform"), ("video rendering might fail")); - } else { - gst_bin_add (bin, chain->conv); - if (prev) { -@@ -1285,27 +1285,6 @@ gen_video_chain (GstPlaySink * playsink, gboolean raw, gboolean async) - } - prev = chain->conv; - } -- -- GST_DEBUG_OBJECT (playsink, "creating videoscale"); -- chain->scale = gst_element_factory_make ("videoscale", "vscale"); -- if (chain->scale == NULL) { -- post_missing_element_message (playsink, "videoscale"); -- GST_ELEMENT_WARNING (playsink, CORE, MISSING_PLUGIN, -- (_("Missing element '%s' - check your GStreamer installation."), -- "videoscale"), ("possibly a liboil version mismatch?")); -- } else { -- /* Add black borders if necessary to keep the DAR */ -- g_object_set (chain->scale, "add-borders", TRUE, NULL); -- gst_bin_add (bin, chain->scale); -- if (prev) { -- if (!gst_element_link_pads_full (prev, "src", chain->scale, "sink", -- GST_PAD_LINK_CHECK_TEMPLATE_CAPS)) -- goto link_failed; -- } else { -- head = chain->scale; -- } -- prev = chain->scale; -- } - } - - if (prev) { --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0017-playbin-disable-interlaced-support.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0017-playbin-disable-interlaced-support.patch deleted file mode 100644 index 44bb868..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0017-playbin-disable-interlaced-support.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 82d8f741f626ed449c84e0ae4c8e27219557149e Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Thu, 19 Aug 2010 10:32:52 -0500 -Subject: [PATCH 17/24] playbin: disable interlaced support - -Latest totem is enabling interlaced support, which causes similar issues -to when native-video is not used.. for now, since none of the codecs -support it, disable interlaced support. ---- - gst/playback/gstplaysink.c | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c -index dedd3be..957f288 100644 ---- a/gst/playback/gstplaysink.c -+++ b/gst/playback/gstplaysink.c -@@ -2118,11 +2118,13 @@ gst_play_sink_reconfigure (GstPlaySink * playsink) - /* we have video and we are requested to show it */ - need_video = TRUE; - -+#if 0 - /* we only deinterlace if native video is not requested and - * we have raw video */ - if ((flags & GST_PLAY_FLAG_DEINTERLACE) - && !(flags & GST_PLAY_FLAG_NATIVE_VIDEO) && playsink->video_pad_raw) - need_deinterlace = TRUE; -+#endif - } - - if (playsink->audio_pad) { --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0018-textoverlay-add-stride-support.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0018-textoverlay-add-stride-support.patch deleted file mode 100644 index 8c0c423..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0018-textoverlay-add-stride-support.patch +++ /dev/null @@ -1,132 +0,0 @@ -From 8cd575c6c2f46464d7704e07102a648bba08a6c6 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Mon, 23 Aug 2010 14:01:14 -0500 -Subject: [PATCH 18/24] textoverlay: add stride support - ---- - ext/pango/gsttextoverlay.c | 37 +++++++++++++++++++++++++------------ - ext/pango/gsttextoverlay.h | 1 + - 2 files changed, 26 insertions(+), 12 deletions(-) - -diff --git a/ext/pango/gsttextoverlay.c b/ext/pango/gsttextoverlay.c -index 915a59c..1bf3638 100644 ---- a/ext/pango/gsttextoverlay.c -+++ b/ext/pango/gsttextoverlay.c -@@ -187,7 +187,7 @@ static GstStaticPadTemplate src_template_factory = - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_BGRx ";" - GST_VIDEO_CAPS_xRGB ";" -- GST_VIDEO_CAPS_YUV ("{AYUV, I420, UYVY, NV12, NV21}")) -+ GST_VIDEO_CAPS_YUV_STRIDED ("{AYUV, I420, UYVY, NV12, NV21}", "[0, max]")) - ); - - static GstStaticPadTemplate video_sink_template_factory = -@@ -196,7 +196,7 @@ static GstStaticPadTemplate video_sink_template_factory = - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_BGRx ";" - GST_VIDEO_CAPS_xRGB ";" -- GST_VIDEO_CAPS_YUV ("{AYUV, I420, UYVY, NV12, NV21}")) -+ GST_VIDEO_CAPS_YUV_STRIDED ("{AYUV, I420, UYVY, NV12, NV21}", "[0, max]")) - ); - - static GstStaticPadTemplate text_sink_template_factory = -@@ -724,12 +724,13 @@ gst_text_overlay_setcaps (GstPad * pad, GstCaps * caps) - - overlay->width = 0; - overlay->height = 0; -+ overlay->rowstride = 0; - structure = gst_caps_get_structure (caps, 0); - fps = gst_structure_get_value (structure, "framerate"); - - if (fps -- && gst_video_format_parse_caps (caps, &overlay->format, &overlay->width, -- &overlay->height)) { -+ && gst_video_format_parse_caps_strided (caps, &overlay->format, &overlay->width, -+ &overlay->height, &overlay->rowstride)) { - ret = gst_pad_set_caps (overlay->srcpad, caps); - } - -@@ -1364,14 +1365,21 @@ gst_text_overlay_render_pangocairo (GstTextOverlay * overlay, - #define BOX_XPAD 6 - #define BOX_YPAD 6 - -+static gint -+gst_text_overlay_get_stride (GstTextOverlay * overlay, gint component) -+{ -+ if (overlay->rowstride) -+ return overlay->rowstride; -+ return gst_video_format_get_row_stride (overlay->format, 0, overlay->width); -+} -+ - static inline void - gst_text_overlay_shade_planar_Y (GstTextOverlay * overlay, guchar * dest, - gint x0, gint x1, gint y0, gint y1) - { - gint i, j, dest_stride; - -- dest_stride = gst_video_format_get_row_stride (overlay->format, 0, -- overlay->width); -+ dest_stride = gst_text_overlay_get_stride (overlay, 0); - - x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width); - x1 = CLAMP (x1 + BOX_XPAD, 0, overlay->width); -@@ -1436,7 +1444,9 @@ static inline void - gst_text_overlay_shade_xRGB (GstTextOverlay * overlay, guchar * dest, - gint x0, gint x1, gint y0, gint y1) - { -- gint i, j; -+ gint i, j, dest_stride; -+ -+ dest_stride = gst_text_overlay_get_stride (overlay, 0); - - x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width); - x1 = CLAMP (x1 + BOX_XPAD, 0, overlay->width); -@@ -1448,7 +1458,7 @@ gst_text_overlay_shade_xRGB (GstTextOverlay * overlay, guchar * dest, - for (j = x0; j < x1; j++) { - gint y, y_pos, k; - -- y_pos = (i * 4 * overlay->width) + j * 4; -+ y_pos = (i * dest_stride) + j * 4; - for (k = 0; k < 4; k++) { - y = dest[y_pos + k] + overlay->shading_value; - dest[y_pos + k] = CLAMP (y, 0, 255); -@@ -1480,10 +1490,10 @@ gst_text_overlay_blit_NV12_NV21 (GstTextOverlay * overlay, - w = overlay->width; - h = overlay->height; - -- y_stride = gst_video_format_get_row_stride (overlay->format, 0, w); -- uv_stride = gst_video_format_get_row_stride (overlay->format, 1, w); -- u_offset = gst_video_format_get_component_offset (overlay->format, 1, w, h); -- v_offset = gst_video_format_get_component_offset (overlay->format, 2, w, h); -+ y_stride = gst_text_overlay_get_stride (overlay, 0); -+ uv_stride = gst_text_overlay_get_stride (overlay, 1); -+ u_offset = gst_video_format_get_component_offset (overlay->format, 1, y_stride, h); -+ v_offset = gst_video_format_get_component_offset (overlay->format, 2, y_stride, h); - - gst_text_overlay_blit_1 (overlay, yuv_pixels, xpos, ypos, overlay->text_image, - y_stride); -@@ -1509,6 +1519,9 @@ gst_text_overlay_blit_I420 (GstTextOverlay * overlay, - w = overlay->width; - h = overlay->height; - -+ /* XXX this is not updated for rowstride.. but rowstride could be -+ * ambiguous for I420.. is the U and V plane rowstride or rowstride/2? -+ */ - y_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 0, w); - u_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 1, w); - v_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 2, w); -diff --git a/ext/pango/gsttextoverlay.h b/ext/pango/gsttextoverlay.h -index 5fddf3a..bc2940b 100644 ---- a/ext/pango/gsttextoverlay.h -+++ b/ext/pango/gsttextoverlay.h -@@ -112,6 +112,7 @@ struct _GstTextOverlay { - - gint width; - gint height; -+ gint rowstride; - gint fps_n; - gint fps_d; - GstVideoFormat format; --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0019-video-more-flexible-video-caps-utility.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0019-video-more-flexible-video-caps-utility.patch deleted file mode 100644 index fcf4fd6..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0019-video-more-flexible-video-caps-utility.patch +++ /dev/null @@ -1,228 +0,0 @@ -From ecac5f6e2cab295e742784f6d4d11800b1f37c6d Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Mon, 13 Sep 2010 19:04:47 -0500 -Subject: [PATCH 19/24] video: more flexible video caps utility - -Add gst_video_format_new_caps_simple() to allow for more flexible video -caps builder, which could be used for template caps and non-fixed caps. ---- - gst-libs/gst/video/video.c | 129 ++++++++++++++++++++++++++------------------ - gst-libs/gst/video/video.h | 2 + - 2 files changed, 78 insertions(+), 53 deletions(-) - -diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c -index ff9c4fb..ef8edcc 100644 ---- a/gst-libs/gst/video/video.c -+++ b/gst-libs/gst/video/video.c -@@ -590,15 +590,12 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, - } - - /** -- * gst_video_format_new_caps_strided: -+ * gst_video_format_new_caps_simple: - * @format: the #GstVideoFormat describing the raw video format -- * @width: width of video -- * @height: height of video -- * @rowstride: the rowstride (in bytes), or 0 if no rowstride -- * @framerate_n: numerator of frame rate -- * @framerate_d: denominator of frame rate -- * @par_n: numerator of pixel aspect ratio -- * @par_d: denominator of pixel aspect ratio -+ * @rowstride: 0 for unstrided, -1 for any stride (unfixed), or other -+ * for fixed stride -+ * @fieldname: first field to set -+ * @...: additional arguments - * - * Creates a new #GstCaps object based on the parameters provided. - * -@@ -607,25 +604,20 @@ gst_video_format_new_caps_interlaced (GstVideoFormat format, - * Returns: a new #GstCaps object, or NULL if there was an error - */ - GstCaps * --gst_video_format_new_caps_strided (GstVideoFormat format, -- int width, int height, int rowstride, -- int framerate_n, int framerate_d, int par_n, int par_d) -+gst_video_format_new_caps_simple (GstVideoFormat format, int rowstride, -+ const char *fieldname, ...) - { -- GstCaps *caps = NULL; -+ va_list varargs; -+ GstStructure *s; - - g_return_val_if_fail (format != GST_VIDEO_FORMAT_UNKNOWN, NULL); -- g_return_val_if_fail (width > 0 && height > 0, NULL); - - if (gst_video_format_is_yuv (format)) { -- caps = gst_caps_new_simple ( -- rowstride ? "video/x-raw-yuv-strided" : "video/x-raw-yuv", -+ s = gst_structure_new (rowstride ? -+ "video/x-raw-yuv-strided" : "video/x-raw-yuv", - "format", GST_TYPE_FOURCC, gst_video_format_to_fourcc (format), -- "width", G_TYPE_INT, width, -- "height", G_TYPE_INT, height, -- "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d, -- "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL); -+ NULL); - } else if (gst_video_format_is_rgb (format)) { -- GstCaps *caps; - int red_mask = 0; - int blue_mask = 0; - int green_mask = 0; -@@ -684,15 +676,12 @@ gst_video_format_new_caps_strided (GstVideoFormat format, - } else { - mask = 0xff0000; - } -- red_mask = -- mask >> (8 * gst_video_format_get_component_offset (format, 0, -- width, height)); -- green_mask = -- mask >> (8 * gst_video_format_get_component_offset (format, 1, -- width, height)); -- blue_mask = -- mask >> (8 * gst_video_format_get_component_offset (format, 2, -- width, height)); -+ red_mask = mask >> -+ (8 * gst_video_format_get_component_offset (format, 0, 1, 1)); -+ green_mask = mask >> -+ (8 * gst_video_format_get_component_offset (format, 1, 1, 1)); -+ blue_mask = mask >> -+ (8 * gst_video_format_get_component_offset (format, 2, 1, 1)); - } else if (bpp == 16) { - switch (format) { - case GST_VIDEO_FORMAT_RGB16: -@@ -723,17 +712,13 @@ gst_video_format_new_caps_strided (GstVideoFormat format, - return NULL; - } - -- caps = gst_caps_new_simple ( -+ s = gst_structure_new ( - rowstride ? "video/x-raw-rgb-strided" : "video/x-raw-rgb", - "bpp", G_TYPE_INT, bpp, -- "depth", G_TYPE_INT, depth, -- "width", G_TYPE_INT, width, -- "height", G_TYPE_INT, height, -- "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d, -- "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL); -+ "depth", G_TYPE_INT, depth, NULL); - - if (bpp != 8) { -- gst_caps_set_simple (caps, -+ gst_structure_set (s, - "endianness", G_TYPE_INT, G_BIG_ENDIAN, - "red_mask", G_TYPE_INT, red_mask, - "green_mask", G_TYPE_INT, green_mask, -@@ -741,10 +726,12 @@ gst_video_format_new_caps_strided (GstVideoFormat format, - } - - if (have_alpha) { -- alpha_mask = -- mask >> (8 * gst_video_format_get_component_offset (format, 3, -- width, height)); -- gst_caps_set_simple (caps, "alpha_mask", G_TYPE_INT, alpha_mask, NULL); -+ /* note: we are passing a bogus width/height to get_component_offset(), -+ * but those parameters are ignored for the packed formats so it is ok -+ */ -+ alpha_mask = mask >> -+ (8 * gst_video_format_get_component_offset (format, 3, 1, 1)); -+ gst_structure_set (s, "alpha_mask", G_TYPE_INT, alpha_mask, NULL); - } - } else if (gst_video_format_is_gray (format)) { - int bpp; -@@ -770,32 +757,68 @@ gst_video_format_new_caps_strided (GstVideoFormat format, - } - - if (bpp > 8) { -- caps = gst_caps_new_simple ("video/x-raw-gray", -+ s = gst_structure_new (rowstride ? -+ "video/x-raw-gray-strided" : "video/x-raw-gray", - "bpp", G_TYPE_INT, bpp, - "depth", G_TYPE_INT, depth, -- "width", G_TYPE_INT, width, -- "height", G_TYPE_INT, height, -- "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d, -- "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL); -+ NULL); - } else { -- caps = gst_caps_new_simple ("video/x-raw-gray", -+ s = gst_structure_new (rowstride ? -+ "video/x-raw-gray-strided" : "video/x-raw-gray", - "bpp", G_TYPE_INT, bpp, - "depth", G_TYPE_INT, depth, - "endianness", G_TYPE_INT, G_BIG_ENDIAN, -- "width", G_TYPE_INT, width, -- "height", G_TYPE_INT, height, -- "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d, -- "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL); -+ NULL); - } - } else { - return NULL; - } - -- if (rowstride) { -- gst_caps_set_simple (caps, "rowstride", G_TYPE_INT, rowstride, NULL); -+ if (rowstride > 0) { -+ gst_structure_set (s, "rowstride", -+ G_TYPE_INT, rowstride, NULL); -+ } else if (rowstride < 0) { -+ gst_structure_set (s, "rowstride", -+ GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); - } - -- return caps; -+ va_start (varargs, fieldname); -+ gst_structure_set_valist (s, fieldname, varargs); -+ va_end (varargs); -+ -+ return gst_caps_new_full (s, NULL); -+} -+ -+/** -+ * gst_video_format_new_caps_strided: -+ * @format: the #GstVideoFormat describing the raw video format -+ * @width: width of video -+ * @height: height of video -+ * @rowstride: the rowstride (in bytes), or 0 if no rowstride -+ * @framerate_n: numerator of frame rate -+ * @framerate_d: denominator of frame rate -+ * @par_n: numerator of pixel aspect ratio -+ * @par_d: denominator of pixel aspect ratio -+ * -+ * Creates a new #GstCaps object based on the parameters provided. -+ * -+ * Since: ??? -+ * -+ * Returns: a new #GstCaps object, or NULL if there was an error -+ */ -+GstCaps * -+gst_video_format_new_caps_strided (GstVideoFormat format, -+ int width, int height, int rowstride, -+ int framerate_n, int framerate_d, int par_n, int par_d) -+{ -+ g_return_val_if_fail (width > 0 && height > 0, NULL); -+ -+ return gst_video_format_new_caps_simple (format, rowstride, -+ "width", G_TYPE_INT, width, -+ "height", G_TYPE_INT, height, -+ "framerate", GST_TYPE_FRACTION, framerate_n, framerate_d, -+ "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, -+ NULL); - } - - /** -diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h -index 5bac21f..bbd33f7 100644 ---- a/gst-libs/gst/video/video.h -+++ b/gst-libs/gst/video/video.h -@@ -430,6 +430,8 @@ GstCaps * gst_video_format_new_caps_interlaced (GstVideoFormat format, - GstCaps * gst_video_format_new_caps_strided (GstVideoFormat format, - int width, int height, int rowstride, - int framerate_n, int framerate_d, int par_n, int par_d); -+GstCaps * gst_video_format_new_caps_simple (GstVideoFormat format, -+ int rowstride, const char *fieldname, ...); - GstVideoFormat gst_video_format_from_fourcc (guint32 fourcc); - guint32 gst_video_format_to_fourcc (GstVideoFormat format); - gboolean gst_video_format_is_rgb (GstVideoFormat format); --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0020-video-fix-endianess-issue-for-16bit-RGB-formats.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0020-video-fix-endianess-issue-for-16bit-RGB-formats.patch deleted file mode 100644 index bf07cea..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0020-video-fix-endianess-issue-for-16bit-RGB-formats.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 569f9ca7a8ce923d43956771e8a142a9b31114f1 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Mon, 13 Sep 2010 19:05:56 -0500 -Subject: [PATCH 20/24] video: fix endianess issue for 16bit RGB formats - ---- - gst-libs/gst/video/video.c | 4 +++- - 1 files changed, 3 insertions(+), 1 deletions(-) - -diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c -index ef8edcc..a5ec6b7 100644 ---- a/gst-libs/gst/video/video.c -+++ b/gst-libs/gst/video/video.c -@@ -625,6 +625,7 @@ gst_video_format_new_caps_simple (GstVideoFormat format, int rowstride, - int depth; - int bpp; - gboolean have_alpha; -+ int endianness = G_BIG_ENDIAN; - unsigned int mask = 0; - - switch (format) { -@@ -708,6 +709,7 @@ gst_video_format_new_caps_simple (GstVideoFormat format, int rowstride, - default: - return NULL; - } -+ endianness = G_BYTE_ORDER; - } else if (bpp != 8) { - return NULL; - } -@@ -719,7 +721,7 @@ gst_video_format_new_caps_simple (GstVideoFormat format, int rowstride, - - if (bpp != 8) { - gst_structure_set (s, -- "endianness", G_TYPE_INT, G_BIG_ENDIAN, -+ "endianness", G_TYPE_INT, endianness, - "red_mask", G_TYPE_INT, red_mask, - "green_mask", G_TYPE_INT, green_mask, - "blue_mask", G_TYPE_INT, blue_mask, NULL); --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0021-stride-more-flexible-stride-color-conversion.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0021-stride-more-flexible-stride-color-conversion.patch deleted file mode 100644 index b897c5e..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0021-stride-more-flexible-stride-color-conversion.patch +++ /dev/null @@ -1,1131 +0,0 @@ -From e8e3c9ae037daa4abd60f08bc49f370dd5f7b3c6 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Mon, 13 Sep 2010 19:10:36 -0500 -Subject: [PATCH 21/24] stride: more flexible stride/color conversion - -Refactor stride transform element to address a number of limitations: -1) support converting buffers from one rowstride to another, in addition to -just handling conversion from strided <-> unstrided. -2) refactor convert code to make it easier to add new formats -3) refactor caps handling code to build template caps based upon color -formats listed in convert (stride_conversions table). -4) refactor caps parsing/building to correctly handle RGB formats -5) add support for crop.. currently we optimize by just only copying the -uncropped part of the frame, but this is the first step to true handling of -cropping, so that we can crop out padding for the benefit of sink elements -that don't understand crop or stride. (The convert code handles it fine.. -the caps parsing/building in gststridetransform.c would need to handle caps -re-negotiation when the crop changes for this to be complete.) ---- - gst/stride/armv7.s | 8 +- - gst/stride/convert.c | 400 ++++++++++++++++++++------------------- - gst/stride/gststridetransform.c | 375 +++++++++++++++++++++++++------------ - gst/stride/gststridetransform.h | 25 +++- - 4 files changed, 490 insertions(+), 318 deletions(-) - -diff --git a/gst/stride/armv7.s b/gst/stride/armv7.s -index 2697a14..5f4200d 100644 ---- a/gst/stride/armv7.s -+++ b/gst/stride/armv7.s -@@ -28,7 +28,7 @@ - .global stride_copy_zip2 - .type stride_copy_zip2, %function - @void --@stride_copy_zip2 (guchar *new_buf, guchar *orig_buf1, guchar *orig_buf2, gint sz) -+@stride_copy_zip2 (guchar * out, guchar * in1, guchar * in2, gint sz) - @{ - @@@@ note: r0-r3, q0-3, and q8-q15 do not need to be preserved - stride_copy_zip2: -@@ -74,8 +74,8 @@ stride_copy_zip2_3: - .global stride_copy_zip3a - .type stride_copy_zip3a, %function - @void --@stride_copy_zip3a (guchar *new_buf, --@ guchar *orig_buf1, guchar *orig_buf2, guchar *orig_buf3, gint sz) -+@stride_copy_zip3a (guchar * out, -+@ guchar * in1, guchar * in2, guchar * in3, gint sz) - @{ - @@@@ note: r0-r3, q0-3, and q8-q15 do not need to be preserved - stride_copy_zip3a: -@@ -136,7 +136,7 @@ stride_copy_zip3a_3: - .global stride_copy - .type stride_copy, %function - @void --@stride_copy (guchar *new_buf, guchar *orig_buf, gint sz) -+@stride_copy (guchar *out, guchar *in, gint sz) - @{ - @@@@ note: r0-r3, q0-3, and q8-q15 do not need to be preserved - stride_copy: -diff --git a/gst/stride/convert.c b/gst/stride/convert.c -index 17f9e2a..5d392ac 100644 ---- a/gst/stride/convert.c -+++ b/gst/stride/convert.c -@@ -55,32 +55,31 @@ void stride_copy_zip3a (guchar * new_buf, guchar * orig_buf1, - void stride_copy (guchar * new_buf, guchar * orig_buf, gint sz); - - WEAK void --stride_copy_zip2 (guchar * new_buf, guchar * orig_buf1, guchar * orig_buf2, -- gint sz) -+stride_copy_zip2 (guchar * out, guchar * in1, guchar * in2, gint sz) - { - while (sz--) { -- *new_buf++ = *orig_buf1++; -- *new_buf++ = *orig_buf2++; -+ *out++ = *in1++; -+ *out++ = *in2++; - } - } - - WEAK void --stride_copy_zip3a (guchar * new_buf, -- guchar * orig_buf1, guchar * orig_buf2, guchar * orig_buf3, gint sz) -+stride_copy_zip3a (guchar * out, -+ guchar * in1, guchar * in2, guchar * in3, gint sz) - { - while (sz > 1) { -- *new_buf++ = *orig_buf1++; -- *new_buf++ = *orig_buf2++; -- *new_buf++ = *orig_buf1++; -- *new_buf++ = *orig_buf3++; -+ *out++ = *in1++; -+ *out++ = *in2++; -+ *out++ = *in1++; -+ *out++ = *in3++; - sz -= 2; - } - } - - WEAK void --stride_copy (guchar * new_buf, guchar * orig_buf, gint sz) -+stride_copy (guchar * out, guchar * in, gint sz) - { -- memcpy (new_buf, orig_buf, sz); -+ memcpy (out, in, sz); - } - - -@@ -88,31 +87,19 @@ stride_copy (guchar * new_buf, guchar * orig_buf, gint sz) - * move to strided buffer, interleaving two planes of identical dimensions - */ - static void --stridemove_zip2 (guchar * new_buf, guchar * orig_buf1, guchar * orig_buf2, -- gint new_width, gint orig_width, gint height) -+stridemove_zip2 (guchar * out, guchar * in1, guchar * in2, -+ gint out_bpl, gint in_bpl, gint width, gint height) - { - int row; - - GST_DEBUG -- ("new_buf=%p, orig_buf1=%p, orig_buf2=%p, new_width=%d, orig_width=%d, height=%d", -- new_buf, orig_buf1, orig_buf2, new_width, orig_width, height); -- -- /* if increasing the stride, work from bottom-up to avoid overwriting data -- * that has not been moved yet.. otherwise, work in the opposite order, -- * for the same reason. -- */ -- if (new_width > orig_width) { -- for (row = height - 1; row >= 0; row--) { -- stride_copy_zip2 (new_buf + (new_width * row), -- orig_buf1 + (orig_width * row), -- orig_buf2 + (orig_width * row), orig_width); -- } -- } else { -- for (row = 0; row < height; row++) { -- stride_copy_zip2 (new_buf + (new_width * row), -- orig_buf1 + (orig_width * row), -- orig_buf2 + (orig_width * row), new_width); -- } -+ ("out=%p, in1=%p, in2=%p, out_bpl=%d, in_bpl=%d, width=%d, height=%d", -+ out, in1, in2, out_bpl, in_bpl, width, height); -+ -+ for (row = 0; row < height; row++) { -+ stride_copy_zip2 (out + (out_bpl * row), -+ in1 + (in_bpl * row), -+ in2 + (in_bpl * row), width); - } - } - -@@ -121,26 +108,28 @@ stridemove_zip2 (guchar * new_buf, guchar * orig_buf1, guchar * orig_buf2, - * (orig_buf1) has 2x as many samples.. Ie. ABACABAC.. - */ - static void --stridemove_zip3a (guchar * new_buf, -- guchar * orig_buf1, guchar * orig_buf2, guchar * orig_buf3, -- guint new_width, gint orig_width, gint height) -+stridemove_zip3a (guchar * out, -+ guchar * in1, guchar * in2, guchar * in3, -+ guint out_bpl, gint in_bpl, gint width, gint height) - { -- gint copy_width = (new_width < orig_width) ? new_width : orig_width; -+ GST_DEBUG -+ ("out=%p, in1=%p, in2=%p, in3=%p, out_bpl=%d, in_bpl=%d, width=%d, height=%d", -+ out, in1, in2, in3, out_bpl, in_bpl, width, height); - - while (height > 0) { - - /* even row */ -- stride_copy_zip3a (new_buf, orig_buf1, orig_buf2, orig_buf3, copy_width); -- new_buf += new_width; -- orig_buf1 += orig_width; -+ stride_copy_zip3a (out, in1, in2, in3, width); -+ out += out_bpl; -+ in1 += in_bpl; - - /* odd row, recycles same U & V */ -- stride_copy_zip3a (new_buf, orig_buf1, orig_buf2, orig_buf3, copy_width); -- new_buf += new_width; -- orig_buf1 += orig_width; -+ stride_copy_zip3a (out, in1, in2, in3, width); -+ out += out_bpl; -+ in1 += in_bpl; - -- orig_buf2 += orig_width / 2; -- orig_buf3 += orig_width / 2; -+ in2 += in_bpl / 2; -+ in3 += in_bpl / 2; - - height -= 2; - } -@@ -154,28 +143,18 @@ stridemove_zip3a (guchar * new_buf, - * enough. - */ - static void --stridemove (guchar * new_buf, guchar * orig_buf, gint new_width, -- gint orig_width, gint height) -+stridemove (guchar * out, guchar * in, gint out_bpl, gint in_bpl, -+ gint width, gint height) - { - int row; - -- GST_DEBUG ("new_buf=%p, orig_buf=%p, new_width=%d, orig_width=%d, height=%d", -- new_buf, orig_buf, new_width, orig_width, height); -- -- /* if increasing the stride, work from bottom-up to avoid overwriting data -- * that has not been moved yet.. otherwise, work in the opposite order, -- * for the same reason. -- */ -- if (new_width > orig_width) { -- for (row = height - 1; row >= 0; row--) { -- stride_copy (new_buf + (new_width * row), orig_buf + (orig_width * row), -- orig_width); -- } -- } else { -- for (row = 0; row < height; row++) { -- stride_copy (new_buf + (new_width * row), orig_buf + (orig_width * row), -- new_width); -- } -+ GST_DEBUG ("out=%p, in=%p, out_bpl=%d, in_bpl=%d, width=%d, height=%d", -+ out, in, out_bpl, in_bpl, width, height); -+ -+ for (row = 0; row < height; row++) { -+ stride_copy (out, in, width); -+ out += out_bpl; -+ in += in_bpl; - } - } - -@@ -183,195 +162,232 @@ stridemove (guchar * new_buf, guchar * orig_buf, gint new_width, - * Conversion Functions: - */ - --/** convert 4:2:0 semiplanar to same 4:2:0 semiplanar */ --static GstFlowReturn --unstridify_420sp_420sp (GstStrideTransform * self, guchar * unstrided, -- guchar * strided) -+/** -+ * helper to calculate offsets/sizes that are re-used for each frame (until -+ * caps or crop changes) -+ * @isx: input sub-sampling in x direction -+ * @osx: output sub-sampling in x direction -+ * @isy: input sub-sampling in y direction -+ * @isx: input sub-sampling in y direction -+ */ -+static inline gboolean refresh_cache(GstStrideTransform * self, -+ gint nplanes, gint bpp, gint * isx, gint * osx, gint * isy, gint * osy) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->in_rowstride; -+ gint in_off, out_off; -+ int i; - -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ if (((self->crop_top + self->crop_height) > self->height) || -+ ((self->crop_left + self->crop_width) > self->width)) { -+ GST_ERROR_OBJECT (self, "invalid crop parameter"); -+ return GST_FLOW_ERROR; -+ } - -- stridemove (unstrided, strided, width, stride, -- (GST_ROUND_UP_2 (height) * 3) / 2); -+ in_off = out_off = 0; - -- return GST_FLOW_OK; --} -+ for (i = 0; i < nplanes; i++) { -+ Cache * cache = &self->cache[i]; - --static GstFlowReturn --stridify_420sp_420sp (GstStrideTransform * self, guchar * strided, -- guchar * unstrided) --{ -- gint width = self->width; -- gint height = self->height; -- gint stride = self->out_rowstride; -+ cache->in_bpl = self->in_rowstride ? -+ self->in_rowstride : bpp * self->width; - -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ cache->out_bpl = self->out_rowstride ? -+ self->out_rowstride : bpp * self->width; - -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -- stridemove (strided, unstrided, stride, width, -- (GST_ROUND_UP_2 (height) * 3) / 2); -+ if ((cache->in_bpl < (self->width * bpp)) || -+ (cache->out_bpl < (self->width * bpp))) { -+ GST_ERROR_OBJECT (self, "invalid stride parameter"); -+ return GST_FLOW_ERROR; -+ } - -- return GST_FLOW_OK; --} -+ cache->width = self->crop_width ? -+ self->crop_width : self->width; - --/** convert 4:2:0 planar to same 4:2:0 planar */ --static GstFlowReturn --unstridify_420p_420p (GstStrideTransform * self, guchar * unstrided, -- guchar * strided) --{ -- gint width = self->width; -- gint height = self->height; -- gint stride = self->in_rowstride; -+ cache->height = self->crop_height ? -+ self->crop_height : self->height; - -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ if ((cache->width > self->width) || -+ (cache->height > self->height)) { -+ GST_ERROR_OBJECT (self, "invalid crop width/height parameter"); -+ return GST_FLOW_ERROR; -+ } - -- stridemove (unstrided, strided, width, stride, height); /* move Y */ -- stridemove (unstrided + (height * width), strided + (height * stride), width / 2, stride, height); /* move V/U */ -- /* XXX odd widths/heights/strides: */ -- stridemove (unstrided + (int) (height * width * 1.5), strided + (int) (height * stride * 1.5), width / 2, stride, height); /* move U/V */ -+ /* note: everything above here is same for each plane, so in theory we -+ * could only calculate on first plane, and copy on subsequent planes -+ */ -+ -+ /* adjust for sub-sampling and bytes per pixel (bpp): */ -+ cache->in_bpl /= *isx; -+ cache->out_bpl /= *osx; -+ cache->width *= bpp; -+ cache->width /= *isx; -+ cache->height /= *isy; -+ -+ /* calculate offset to beginning of data to copy/transform: */ -+ cache->in_off = in_off; -+ cache->in_off += (bpp * self->crop_left / *isx) + -+ (cache->in_bpl * self->crop_top / *isy); -+ -+ cache->out_off = out_off; -+ cache->out_off += (bpp * self->crop_left / *osx) + -+ (cache->out_bpl * self->crop_top / *osy); -+ -+ in_off += (self->height / *isy) * cache->in_bpl; -+ out_off += (self->height / *osy) * cache->out_bpl; -+ -+ osx++; -+ isx++; -+ osy++; -+ isy++; -+ } - - return GST_FLOW_OK; - } - --static GstFlowReturn --stridify_420p_420p (GstStrideTransform * self, guchar * strided, -- guchar * unstrided) -+/** perform simple convert between buffers of same format */ -+static inline GstFlowReturn convert_n_n (GstStrideTransform *self, -+ guchar * out, guchar * in, gint nplanes) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->out_rowstride; -- -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ int i; - -- /* XXX odd widths/heights/strides: */ -- stridemove (strided + (int) (height * stride * 1.5), unstrided + (int) (height * width * 1.5), stride, width / 2, height); /* move U/V */ -- stridemove (strided + (height * stride), unstrided + (height * width), stride, width / 2, height); /* move V/U */ -- stridemove (strided, unstrided, stride, width, height); /* move Y */ -+ for (i = 0; i < nplanes; i++) { -+ stridemove (out + self->cache[i].out_off, in + self->cache[i].in_off, -+ self->cache[i].out_bpl, self->cache[i].in_bpl, -+ self->cache[i].width, self->cache[i].height); -+ } - - return GST_FLOW_OK; - } - --/** convert 4:2:2 packed to same 4:2:2 packed */ -+/** convert 4:2:0 semiplanar to same 4:2:0 semiplanar */ - static GstFlowReturn --unstridify_422i_422i (GstStrideTransform * self, guchar * unstrided, -- guchar * strided) -+convert_420sp_420sp (GstStrideTransform * self, -+ guchar * out, guchar * in) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->in_rowstride; -- -- g_return_val_if_fail (stride >= (width * 2), GST_FLOW_ERROR); -- -- stridemove (unstrided, strided, width * 2, stride, height); -+ if (G_UNLIKELY (self->needs_refresh)) { -+ gint sx[] = {1, 1}; -+ gint sy[] = {1, 2}; -+ if (refresh_cache (self, 2, 1, sx, sx, sy, sy)) -+ return GST_FLOW_ERROR; -+ self->needs_refresh = FALSE; -+ } - -- return GST_FLOW_OK; -+ return convert_n_n (self, out, in, 2); - } - -+/** convert 4:2:0 planar to same 4:2:0 planar */ - static GstFlowReturn --stridify_422i_422i (GstStrideTransform * self, guchar * strided, -- guchar * unstrided) -+convert_420p_420p (GstStrideTransform * self, -+ guchar * out, guchar * in) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->out_rowstride; -- -- g_return_val_if_fail (stride >= (width * 2), GST_FLOW_ERROR); -- -- stridemove (strided, unstrided, stride, width * 2, height); -+ if (G_UNLIKELY (self->needs_refresh)) { -+ gint sx[] = {1, 2, 2}; -+ gint sy[] = {1, 2, 2}; -+ if (refresh_cache (self, 3, 1, sx, sx, sy, sy)) -+ return GST_FLOW_ERROR; -+ self->needs_refresh = FALSE; -+ } - -- return GST_FLOW_OK; -+ return convert_n_n (self, out, in, 3); - } - --/** convert I420 unstrided to NV12 strided */ -+/** convert 4:2:2 packed to same 4:2:2 packed */ -+ - static GstFlowReturn --stridify_i420_nv12 (GstStrideTransform * self, guchar * strided, -- guchar * unstrided) -+convert_422i_422i (GstStrideTransform * self, -+ guchar * out, guchar * in) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->out_rowstride; -- -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -- -- /* XXX widths/heights/strides that are not multiple of four??: */ -- stridemove_zip2 (strided + (height * stride), unstrided + (height * width), /* U */ -- unstrided + (int) (height * width * 1.25), /* V */ -- stride, width / 2, height / 2); -- stridemove (strided, unstrided, stride, width, height); /* Y */ -+ if (G_UNLIKELY (self->needs_refresh)) { -+ gint sx[] = {1}; -+ gint sy[] = {1}; -+ if (refresh_cache (self, 1, 2, sx, sx, sy, sy)) -+ return GST_FLOW_ERROR; -+ self->needs_refresh = FALSE; -+ } - -- return GST_FLOW_OK; -+ return convert_n_n (self, out, in, 1); - } - --/** convert I420 unstrided to YUY2 strided */ -+/** convert I420 unstrided to NV12 strided */ - static GstFlowReturn --stridify_i420_yuy2 (GstStrideTransform * self, guchar * strided, -- guchar * unstrided) -+convert_i420_nv12 (GstStrideTransform * self, -+ guchar * out, guchar * in) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->out_rowstride; -+ GstFlowReturn ret; -+ -+ if (G_UNLIKELY (self->needs_refresh)) { -+ gint isx[] = {1, 2, 2}; -+ gint osx[] = {1, 1, 1}; -+ gint sy[] = {1, 2, 2}; -+ if (refresh_cache (self, 3, 1, isx, osx, sy, sy)) -+ return GST_FLOW_ERROR; -+ self->needs_refresh = FALSE; -+ } - -- g_return_val_if_fail (stride >= width, GST_FLOW_ERROR); -+ ret = convert_n_n (self, out, in, 1); -+ if (ret != GST_FLOW_OK) -+ return ret; - -- /* XXX widths/heights/strides that are not multiple of four??: */ -- stridemove_zip3a (strided, unstrided, /* Y */ -- unstrided + (height * width), /* U */ -- unstrided + (int) (height * width * 1.25), /* V */ -- stride, width, height); -+ stridemove_zip2 (out + self->cache[1].out_off, -+ in + self->cache[1].in_off, /* U */ -+ in + self->cache[2].in_off, /* V */ -+ self->cache[2].out_bpl, -+ self->cache[1].in_bpl, -+ self->cache[1].width, -+ self->cache[1].height); - - return GST_FLOW_OK; - } - --/** convert RGB565 to RGB565 strided **/ -+/** convert I420 unstrided to YUY2 strided */ - static GstFlowReturn --stridify_rgb565_rgb565 (GstStrideTransform * self, guchar * strided, -- guchar * unstrided) -+convert_i420_yuy2 (GstStrideTransform * self, -+ guchar * out, guchar * in) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->out_rowstride; -- -- g_return_val_if_fail (stride >= (width * 2), GST_FLOW_ERROR); -+ if (G_UNLIKELY (self->needs_refresh)) { -+ gint sx[] = {1, 2, 2}; -+ gint sy[] = {1, 2, 2}; -+ if (refresh_cache (self, 3, 1, sx, sx, sy, sy)) -+ return GST_FLOW_ERROR; -+ self->needs_refresh = FALSE; -+ } - -- stridemove (strided, unstrided, stride, width * 2, height); -+ stridemove_zip3a (out, -+ in + self->cache[0].in_off, /* Y */ -+ in + self->cache[1].in_off, /* U */ -+ in + self->cache[2].in_off, /* V */ -+ self->cache[0].out_bpl, -+ self->cache[0].in_bpl, -+ self->cache[0].width, -+ self->cache[0].height); - - return GST_FLOW_OK; - } - --/** convert RGB565 strided to RGB565 **/ -+/** convert 16bpp rgb formats */ - static GstFlowReturn --unstridify_rgb565_rgb565 (GstStrideTransform * self, guchar * strided, -- guchar * unstrided) -+convert_rgb16_rgb16 (GstStrideTransform * self, -+ guchar * out, guchar * in) - { -- gint width = self->width; -- gint height = self->height; -- gint stride = self->in_rowstride; -- -- g_return_val_if_fail (stride >= (width * 2), GST_FLOW_ERROR); -- -- stridemove (unstrided, strided, width * 2, stride, height); -- return GST_FLOW_OK; -+ /* format is same 2-bytes per pixel */ -+ return convert_422i_422i (self, out, in); - } - --#define CONVERT(tofmt, fromfmt, stridify, unstridify) \ -+#define CONVERT(tofmt, fromfmt, convert) \ - { \ - { GST_VIDEO_FORMAT_##tofmt, GST_VIDEO_FORMAT_##fromfmt }, \ -- stridify, unstridify \ -+ convert \ - } - - /* last entry has GST_VIDEO_FORMAT_UNKNOWN for in/out formats */ - const Conversion stride_conversions[] = { -- CONVERT (NV12, NV12, stridify_420sp_420sp, unstridify_420sp_420sp), -- CONVERT (I420, I420, stridify_420p_420p, unstridify_420p_420p), -- CONVERT (YV12, YV12, stridify_420p_420p, unstridify_420p_420p), -- CONVERT (YUY2, YUY2, stridify_422i_422i, unstridify_422i_422i), -- CONVERT (UYVY, UYVY, stridify_422i_422i, unstridify_422i_422i), -- CONVERT (I420, NV12, stridify_i420_nv12, NULL), -- CONVERT (I420, YUY2, stridify_i420_yuy2, NULL), -- CONVERT (RGB16, RGB16, stridify_rgb565_rgb565, unstridify_rgb565_rgb565), -+ CONVERT (NV12, NV12, convert_420sp_420sp), -+ CONVERT (I420, I420, convert_420p_420p), -+ CONVERT (YV12, YV12, convert_420p_420p), -+ CONVERT (YUY2, YUY2, convert_422i_422i), -+ CONVERT (UYVY, UYVY, convert_422i_422i), -+ CONVERT (I420, NV12, convert_i420_nv12), -+ CONVERT (I420, YUY2, convert_i420_yuy2), -+ CONVERT (RGB16, RGB16, convert_rgb16_rgb16), - /* add new entries before here */ - {{GST_VIDEO_FORMAT_UNKNOWN}} - }; -diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c -index 4469e7f..7874ed4 100644 ---- a/gst/stride/gststridetransform.c -+++ b/gst/stride/gststridetransform.c -@@ -57,27 +57,6 @@ - /* last entry has GST_VIDEO_FORMAT_UNKNOWN for in/out formats */ - extern const Conversion stride_conversions[]; - --/* TODO: add rgb formats too! */ --#define YUV_SUPPORTED_CAPS \ -- GST_VIDEO_CAPS_YUV_STRIDED ("{I420, YV12, YUY2, UYVY, NV12 }", "[ 0, max ]") -- --#define RGB_SUPPORTED_CAPS \ -- GST_VIDEO_CAPS_RGB_16_STRIDED ("[ 0, max ]") -- -- --static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", -- GST_PAD_SRC, -- GST_PAD_ALWAYS, -- GST_STATIC_CAPS (YUV_SUPPORTED_CAPS ";" RGB_SUPPORTED_CAPS) -- ); -- --static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", -- GST_PAD_SINK, -- GST_PAD_ALWAYS, -- GST_STATIC_CAPS (YUV_SUPPORTED_CAPS ";" RGB_SUPPORTED_CAPS) -- ); -- -- - GST_DEBUG_CATEGORY (stridetransform_debug); - #define GST_CAT_DEFAULT stridetransform_debug - -@@ -85,6 +64,8 @@ GST_DEBUG_CATEGORY (stridetransform_debug); - static void gst_stride_transform_dispose (GObject * obj); - - /* GstBaseTransform functions */ -+static gboolean gst_stride_transform_event (GstBaseTransform * trans, -+ GstEvent * event); - static gboolean gst_stride_transform_get_unit_size (GstBaseTransform * base, - GstCaps * caps, guint * size); - static gboolean gst_stride_transform_transform_size (GstBaseTransform * base, -@@ -96,6 +77,7 @@ static gboolean gst_stride_transform_set_caps (GstBaseTransform * base, - GstCaps * incaps, GstCaps * outcaps); - static GstFlowReturn gst_stride_transform_transform (GstBaseTransform * base, - GstBuffer * inbuf, GstBuffer * outbuf); -+static GstCaps * get_all_templ_caps (GstPadDirection direction); - - GST_BOILERPLATE (GstStrideTransform, gst_stride_transform, GstVideoFilter, - GST_TYPE_VIDEO_FILTER); -@@ -115,9 +97,11 @@ gst_stride_transform_base_init (gpointer g_class) - "Rob Clark <rob@ti.com>,"); - - gst_element_class_add_pad_template (gstelement_class, -- gst_static_pad_template_get (&sink_template)); -+ gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, -+ get_all_templ_caps (GST_PAD_SINK))); - gst_element_class_add_pad_template (gstelement_class, -- gst_static_pad_template_get (&src_template)); -+ gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, -+ get_all_templ_caps (GST_PAD_SRC))); - } - - static void -@@ -128,6 +112,8 @@ gst_stride_transform_class_init (GstStrideTransformClass * klass) - - gobject_class->dispose = gst_stride_transform_dispose; - -+ basetransform_class->event = -+ GST_DEBUG_FUNCPTR (gst_stride_transform_event); - basetransform_class->get_unit_size = - GST_DEBUG_FUNCPTR (gst_stride_transform_get_unit_size); - basetransform_class->transform_size = -@@ -160,6 +146,35 @@ gst_stride_transform_dispose (GObject * object) - G_OBJECT_CLASS (parent_class)->dispose (object); - } - -+static gboolean -+gst_stride_transform_event (GstBaseTransform * trans, GstEvent * event) -+{ -+ GstStrideTransform *self = GST_STRIDE_TRANSFORM (trans); -+ -+ GST_DEBUG_OBJECT (self, "event %" GST_PTR_FORMAT, event); -+ -+ switch (GST_EVENT_TYPE (event)) { -+ /* if we get a crop, we don't change output size (yet, although it -+ * would be nice to be able to figure out if the sink supported -+ * cropping and if it does not perform the crop ourselves.. which -+ * would involve adjusting output caps appropriately). For now -+ * we just treat it as an optimization and avoid copying the data -+ * that will be later cropped out by the sink. -+ */ -+ case GST_EVENT_CROP: -+ gst_event_parse_crop (event, &self->crop_top, &self->crop_left, -+ &self->crop_width, &self->crop_height); -+ self->needs_refresh = TRUE; -+ GST_DEBUG_OBJECT (self, "cropping at %d,%d %dx%d", self->crop_top, -+ self->crop_left, self->crop_width, self->crop_height); -+ default: -+ break; -+ } -+ -+ /* forward all events */ -+ return TRUE; -+} -+ - /** - * figure out the required buffer size based on @caps - */ -@@ -212,95 +227,205 @@ gst_stride_transform_transform_size (GstBaseTransform * base, - return TRUE; - } - -+static inline GstCaps * -+get_templ_caps (GstVideoFormat fmt, gboolean strided) -+{ -+ return gst_video_format_new_caps_simple (fmt, -+ strided ? -1 : 0, -+ "width", GST_TYPE_INT_RANGE, 1, G_MAXINT, -+ "height", GST_TYPE_INT_RANGE, 1, G_MAXINT, -+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, -+ NULL); -+} -+ - /** -- * helper to check possible @fourcc conversions to the list @formats -+ * Utility to get all possible template caps for given direction - */ --static void --add_all_fourcc_conversions (GValue * formats, guint32 fourcc, -- GstPadDirection direction) -+static GstCaps * -+get_all_templ_caps (GstPadDirection direction) - { -+ int i; - gint to_format = (direction == GST_PAD_SINK) ? 1 : 0; -- gint from_format = (direction == GST_PAD_SRC) ? 1 : 0; -- GValue fourccval = { 0 }; -- gint i; -- GstVideoFormat format = gst_video_format_from_fourcc (fourcc); -- -- g_value_init (&fourccval, GST_TYPE_FOURCC); -+ GstCaps *templ = gst_caps_new_empty (); - -- for (i = 0; stride_conversions[i].format[0] != GST_VIDEO_FORMAT_UNKNOWN; i++) { -- if (stride_conversions[i].format[from_format] == format) { -- guint result_fourcc = -- gst_video_format_to_fourcc (stride_conversions[i].format[to_format]); -- gst_value_set_fourcc (&fourccval, result_fourcc); -- gst_value_list_append_value (formats, &fourccval); -- } -+ for (i = 0; stride_conversions[i].format[0]; i++) { -+ const Conversion *c = &stride_conversions[i]; -+ gst_caps_append (templ, get_templ_caps (c->format[to_format], TRUE)); -+ gst_caps_append (templ, get_templ_caps (c->format[to_format], FALSE)); - } -+ -+ gst_caps_do_simplify (templ); -+ -+ GST_DEBUG ("template %s caps: %"GST_PTR_FORMAT, -+ (direction == GST_PAD_SINK) ? "sink" : "src", templ); -+ -+ return templ; - } - --/** -- * helper to add all fields, other than rowstride to @caps, copied from @s. -- */ --static void --add_all_fields (GstCaps * caps, const gchar * name, GstStructure * s, -- gboolean rowstride, GstPadDirection direction) -+static inline gboolean -+is_filtered_field (const gchar *name) - { -- gint idx; -- GstStructure *new_s = gst_structure_new (name, NULL); -+ static const gchar * filtered_fields[] = { -+ "rowstride", "format", "bpp", "depth", "endianness", -+ "red_mask", "green_mask", "blue_mask" -+ }; -+ gint i; -+ for (i = 0; i < G_N_ELEMENTS (filtered_fields); i++) -+ if (!strcmp (filtered_fields[i], name)) -+ return TRUE; -+ return FALSE; -+} - -- if (rowstride) { -- gst_structure_set (new_s, "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, -- NULL); -- } -+static inline GstCaps * -+get_caps (GstVideoFormat fmt, gboolean strided, GstStructure *s) -+{ -+ gint idx; -+ GstCaps *ret = -+ gst_video_format_new_caps_simple (fmt, strided ? -1 : 0, NULL); - - idx = gst_structure_n_fields (s) - 1; - while (idx >= 0) { - const gchar *name = gst_structure_nth_field_name (s, idx); -- const GValue *val = gst_structure_get_value (s, name); - - idx--; - -- /* for format field, check the stride_conversions table to see what -- * we can support: -+ /* filter out certain format specific fields.. copy everything else -+ * from the original struct - */ -- if (!strcmp ("format", name)) { -- GValue formats = { 0 }; -- -- g_value_init (&formats, GST_TYPE_LIST); -+ if (!is_filtered_field (name)) { -+ const GValue *val = gst_structure_get_value (s, name); -+ gst_caps_set_value (ret, name, val); -+ } -+ } - -- if (GST_VALUE_HOLDS_FOURCC (val)) { -- add_all_fourcc_conversions (&formats, -- gst_value_get_fourcc (val), direction); -- } else if (GST_VALUE_HOLDS_LIST (val)) { -- gint i; -- for (i = 0; i < gst_value_list_get_size (val); i++) { -- const GValue *list_val = gst_value_list_get_value (val, i); -- if (GST_VALUE_HOLDS_FOURCC (list_val)) { -- add_all_fourcc_conversions (&formats, -- gst_value_get_fourcc (list_val), direction); -- } else { -- GST_WARNING ("malformed caps!!"); -- break; -- } -- } -- } else { -- GST_WARNING ("malformed caps!!"); -- } -+ return ret; -+} - -- gst_structure_set_value (new_s, "format", &formats); -+/** -+ * Utility to get all possible caps that can be converted to/from (depending -+ * on 'direction') the specified 'fmt'. The rest of the fields are populated -+ * from 's' -+ */ -+static GstCaps * -+get_all_caps (GstPadDirection direction, GstVideoFormat fmt, GstStructure *s) -+{ -+ GstCaps *ret = gst_caps_new_empty (); -+ gint to_format = (direction == GST_PAD_SINK) ? 1 : 0; -+ gint from_format = (direction == GST_PAD_SRC) ? 1 : 0; -+ gint i; - -- continue; -+ for (i = 0; stride_conversions[i].format[0]; i++) { -+ const Conversion *c = &stride_conversions[i]; -+ if (c->format[from_format] == fmt) { -+ gst_caps_append (ret, get_caps (c->format[to_format], TRUE, s)); -+ gst_caps_append (ret, get_caps (c->format[to_format], FALSE, s)); - } -+ } -+ -+ return ret; -+} - -- /* copy over all other non-rowstride fields: */ -- if (strcmp ("rowstride", name)) { -- gst_structure_set_value (new_s, name, val); -+/** convert GValue holding fourcc to GstVideoFormat (for YUV) */ -+static inline GstVideoFormat -+fmt_from_val (const GValue *val) -+{ -+ return gst_video_format_from_fourcc (gst_value_get_fourcc (val)); -+} -+ -+/** convert structure to GstVideoFormat (for RGB) */ -+static inline GstVideoFormat -+fmt_from_struct (const GstStructure *s) -+{ -+ /* hmm.. this is not supporting any case where ranges/lists are used -+ * for any of the rgb related fields in the caps. But I'm not quite -+ * sure a sane way to handle that.. rgb caps suck -+ */ -+ gint depth, bpp, endianness; -+ gint red_mask, green_mask, blue_mask, alpha_mask; -+ gboolean have_alpha, ok = TRUE; -+ -+ ok &= gst_structure_get_int (s, "depth", &depth); -+ ok &= gst_structure_get_int (s, "bpp", &bpp); -+ ok &= gst_structure_get_int (s, "endianness", &endianness); -+ ok &= gst_structure_get_int (s, "red_mask", &red_mask); -+ ok &= gst_structure_get_int (s, "green_mask", &green_mask); -+ ok &= gst_structure_get_int (s, "blue_mask", &blue_mask); -+ have_alpha = gst_structure_get_int (s, "alpha_mask", &alpha_mask); -+ -+ if (!ok) -+ return GST_VIDEO_FORMAT_UNKNOWN; -+ -+ if (depth == 24 && bpp == 32 && endianness == G_BIG_ENDIAN) { -+ if (red_mask == 0xff000000 && green_mask == 0x00ff0000 && -+ blue_mask == 0x0000ff00) { -+ return GST_VIDEO_FORMAT_RGBx; -+ } -+ if (red_mask == 0x0000ff00 && green_mask == 0x00ff0000 && -+ blue_mask == 0xff000000) { -+ return GST_VIDEO_FORMAT_BGRx; -+ } -+ if (red_mask == 0x00ff0000 && green_mask == 0x0000ff00 && -+ blue_mask == 0x000000ff) { -+ return GST_VIDEO_FORMAT_xRGB; -+ } -+ if (red_mask == 0x000000ff && green_mask == 0x0000ff00 && -+ blue_mask == 0x00ff0000) { -+ return GST_VIDEO_FORMAT_xBGR; -+ } -+ } else if (depth == 32 && bpp == 32 && endianness == G_BIG_ENDIAN && -+ have_alpha) { -+ if (red_mask == 0xff000000 && green_mask == 0x00ff0000 && -+ blue_mask == 0x0000ff00 && alpha_mask == 0x000000ff) { -+ return GST_VIDEO_FORMAT_RGBA; -+ } -+ if (red_mask == 0x0000ff00 && green_mask == 0x00ff0000 && -+ blue_mask == 0xff000000 && alpha_mask == 0x000000ff) { -+ return GST_VIDEO_FORMAT_BGRA; -+ } -+ if (red_mask == 0x00ff0000 && green_mask == 0x0000ff00 && -+ blue_mask == 0x000000ff && alpha_mask == 0xff000000) { -+ return GST_VIDEO_FORMAT_ARGB; -+ } -+ if (red_mask == 0x000000ff && green_mask == 0x0000ff00 && -+ blue_mask == 0x00ff0000 && alpha_mask == 0xff000000) { -+ return GST_VIDEO_FORMAT_ABGR; -+ } -+ } else if (depth == 24 && bpp == 24 && endianness == G_BIG_ENDIAN) { -+ if (red_mask == 0xff0000 && green_mask == 0x00ff00 && -+ blue_mask == 0x0000ff) { -+ return GST_VIDEO_FORMAT_RGB; -+ } -+ if (red_mask == 0x0000ff && green_mask == 0x00ff00 && -+ blue_mask == 0xff0000) { -+ return GST_VIDEO_FORMAT_BGR; -+ } -+ } else if ((depth == 15 || depth == 16) && bpp == 16 && -+ endianness == G_BYTE_ORDER) { -+ if (red_mask == GST_VIDEO_COMP1_MASK_16_INT -+ && green_mask == GST_VIDEO_COMP2_MASK_16_INT -+ && blue_mask == GST_VIDEO_COMP3_MASK_16_INT) { -+ return GST_VIDEO_FORMAT_RGB16; -+ } -+ if (red_mask == GST_VIDEO_COMP3_MASK_16_INT -+ && green_mask == GST_VIDEO_COMP2_MASK_16_INT -+ && blue_mask == GST_VIDEO_COMP1_MASK_16_INT) { -+ return GST_VIDEO_FORMAT_BGR16; -+ } -+ if (red_mask == GST_VIDEO_COMP1_MASK_15_INT -+ && green_mask == GST_VIDEO_COMP2_MASK_15_INT -+ && blue_mask == GST_VIDEO_COMP3_MASK_15_INT) { -+ return GST_VIDEO_FORMAT_RGB15; -+ } -+ if (red_mask == GST_VIDEO_COMP3_MASK_15_INT -+ && green_mask == GST_VIDEO_COMP2_MASK_15_INT -+ && blue_mask == GST_VIDEO_COMP1_MASK_15_INT) { -+ return GST_VIDEO_FORMAT_BGR15; - } - } - -- gst_caps_merge_structure (caps, new_s); -+ return GST_VIDEO_FORMAT_UNKNOWN; - } - -- - /** - * we can transform @caps to strided or non-strided caps with otherwise - * identical parameters -@@ -310,31 +435,50 @@ gst_stride_transform_transform_caps (GstBaseTransform * base, - GstPadDirection direction, GstCaps * caps) - { - GstStrideTransform *self = GST_STRIDE_TRANSFORM (base); -- GstCaps *ret; -- GstStructure *s; -- -- g_return_val_if_fail (GST_CAPS_IS_SIMPLE (caps), NULL); -- -- GST_DEBUG_OBJECT (self, "direction=%d, caps=%p", direction, caps); -- LOG_CAPS (self, caps); -- -- ret = gst_caps_new_empty (); -- s = gst_caps_get_structure (caps, 0); -- -- if (gst_structure_has_name (s, "video/x-raw-yuv") || -- gst_structure_has_name (s, "video/x-raw-yuv-strided")) { -- -- add_all_fields (ret, "video/x-raw-yuv", s, FALSE, direction); -- add_all_fields (ret, "video/x-raw-yuv-strided", s, TRUE, direction); -- -- } else if (gst_structure_has_name (s, "video/x-raw-rgb") || -- gst_structure_has_name (s, "video/x-raw-rgb-strided")) { -- -- add_all_fields (ret, "video/x-raw-rgb", s, FALSE, direction); -- add_all_fields (ret, "video/x-raw-rgb-strided", s, TRUE, direction); -+ GstCaps *ret = gst_caps_new_empty (); -+ int i; -+ -+ for (i = 0; i < gst_caps_get_size (caps); i++) { -+ GstStructure *s = gst_caps_get_structure (caps, i); -+ const char *name = gst_structure_get_name (s); -+ -+ /* this is a bit ugly.. ideally it would be easier to parse caps -+ * a bit more generically without having to care so much about -+ * difference between RGB and YUV.. but YUV can be specified as -+ * a list of format params, whereas RGB is a combination of many -+ * fields.. -+ */ -+ if (g_str_has_prefix (name, "video/x-raw-yuv")) { -+ const GValue *val = gst_structure_get_value (s, "format"); - -+ if (GST_VALUE_HOLDS_FOURCC (val)) { -+ gst_caps_append (ret, -+ get_all_caps (direction, fmt_from_val (val), s)); -+ } else if (GST_VALUE_HOLDS_LIST (val)) { -+ gint j; -+ for (j = 0; j < gst_value_list_get_size (val); j++) { -+ const GValue *list_val = gst_value_list_get_value (val, j); -+ if (GST_VALUE_HOLDS_FOURCC (list_val)) { -+ gst_caps_append (ret, -+ get_all_caps (direction, fmt_from_val (list_val), s)); -+ } else { -+ GST_WARNING_OBJECT (self, -+ "malformed format in caps: %"GST_PTR_FORMAT, s); -+ break; -+ } -+ } -+ } else { -+ GST_WARNING_OBJECT (self, "malformed yuv caps: %"GST_PTR_FORMAT, s); -+ } -+ } else if (g_str_has_prefix (name, "video/x-raw-rgb")) { -+ gst_caps_append (ret, get_all_caps (direction, fmt_from_struct (s), s)); -+ } else { -+ GST_WARNING_OBJECT (self, "ignoring: %"GST_PTR_FORMAT, s); -+ } - } - -+ gst_caps_do_simplify (ret); -+ - LOG_CAPS (self, ret); - - return ret; -@@ -369,6 +513,7 @@ gst_stride_transform_set_caps (GstBaseTransform * base, - (stride_conversions[i].format[1] == out_format)) { - GST_DEBUG_OBJECT (self, "found stride_conversion: %d", i); - self->conversion = &stride_conversions[i]; -+ self->needs_refresh = TRUE; - break; - } - } -@@ -378,10 +523,6 @@ gst_stride_transform_set_caps (GstBaseTransform * base, - i, self->conversion, self->in_rowstride, self->out_rowstride); - - g_return_val_if_fail (self->conversion, FALSE); -- g_return_val_if_fail (self->conversion->unstridify -- || !self->in_rowstride, FALSE); -- g_return_val_if_fail (self->conversion->stridify -- || !self->out_rowstride, FALSE); - g_return_val_if_fail (self->width == width, FALSE); - g_return_val_if_fail (self->height == height, FALSE); - -@@ -399,20 +540,14 @@ gst_stride_transform_transform (GstBaseTransform * base, - GST_DEBUG_OBJECT (self, "inbuf=%p (size=%d), outbuf=%p (size=%d)", - inbuf, GST_BUFFER_SIZE (inbuf), outbuf, GST_BUFFER_SIZE (outbuf)); - -- if (self->in_rowstride && self->out_rowstride) { -- GST_DEBUG_OBJECT (self, "not implemented"); // TODO -- return GST_FLOW_ERROR; -- } else if (self->in_rowstride) { -- return self->conversion->unstridify (self, -- GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf)); -- } else if (self->out_rowstride) { -- return self->conversion->stridify (self, -+ if (self->conversion) { -+ return self->conversion->convert (self, - GST_BUFFER_DATA (outbuf), GST_BUFFER_DATA (inbuf)); - } - - GST_DEBUG_OBJECT (self, -- "this shouldn't happen! in_rowstride=%d, out_rowstride=%d", -- self->in_rowstride, self->out_rowstride); -+ "this shouldn't happen! in_rowstride=%d, out_rowstride=%d, conversion=%p", -+ self->in_rowstride, self->out_rowstride, self->conversion); - - return GST_FLOW_ERROR; - } -diff --git a/gst/stride/gststridetransform.h b/gst/stride/gststridetransform.h -index bce2526..34733cd 100644 ---- a/gst/stride/gststridetransform.h -+++ b/gst/stride/gststridetransform.h -@@ -52,11 +52,18 @@ typedef struct { - - GstVideoFormat format[2]; /* in_format, out_format */ - -- GstFlowReturn (*stridify) (GstStrideTransform *self, guchar *strided, guchar *unstrided); -- GstFlowReturn (*unstridify) (GstStrideTransform *self, guchar *unstrided, guchar *strided); -+ GstFlowReturn (*convert) (GstStrideTransform *self, guchar *out, guchar *in); - - } Conversion; - -+typedef struct { -+ gint in_bpl; /* bytes per line in input */ -+ gint out_bpl; /* bytes per line in output */ -+ gint in_off; -+ gint out_off; -+ gint width; -+ gint height; -+} Cache; - - /** - * GstStrideTransform: -@@ -67,9 +74,23 @@ struct _GstStrideTransform { - GstVideoFilter videofilter; - - /*< private >*/ -+ -+ /* values set from caps: */ - gint width, height; - gint in_rowstride; - gint out_rowstride; -+ -+ /* values set from set from crop event: */ -+ gint crop_width, crop_height, crop_top, crop_left; -+ -+ /* cached values used for each conversion, indexed by plane in case of -+ * multi-planar formats. These won't have zero values meaning not-used -+ * (as long as !needs_refresh), but will be set to whatever byte width/ -+ * offset is appropriate for the format. -+ */ -+ Cache cache[3]; -+ gboolean needs_refresh; -+ - const Conversion *conversion; - - /* for caching the tranform_size() results.. */ --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0022-stride-support-for-32bit-RGB-formats.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0022-stride-support-for-32bit-RGB-formats.patch deleted file mode 100644 index ac56a08..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0022-stride-support-for-32bit-RGB-formats.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 30b32e864e9a77b66a36d27d3b071f59633d08b7 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Mon, 13 Sep 2010 19:16:02 -0500 -Subject: [PATCH 22/24] stride: support for 32bit RGB formats - ---- - gst/stride/convert.c | 24 ++++++++++++++++++++++++ - 1 files changed, 24 insertions(+), 0 deletions(-) - -diff --git a/gst/stride/convert.c b/gst/stride/convert.c -index 5d392ac..7f976a5 100644 ---- a/gst/stride/convert.c -+++ b/gst/stride/convert.c -@@ -372,6 +372,22 @@ convert_rgb16_rgb16 (GstStrideTransform * self, - return convert_422i_422i (self, out, in); - } - -+/** convert 32bbp rgb formats */ -+static GstFlowReturn -+convert_rgb32_rgb32 (GstStrideTransform * self, -+ guchar * out, guchar * in) -+{ -+ if (G_UNLIKELY (self->needs_refresh)) { -+ gint sx[] = {1}; -+ gint sy[] = {1}; -+ if (refresh_cache (self, 1, 4, sx, sx, sy, sy)) -+ return GST_FLOW_ERROR; -+ self->needs_refresh = FALSE; -+ } -+ -+ return convert_n_n (self, out, in, 1); -+} -+ - #define CONVERT(tofmt, fromfmt, convert) \ - { \ - { GST_VIDEO_FORMAT_##tofmt, GST_VIDEO_FORMAT_##fromfmt }, \ -@@ -388,6 +404,14 @@ const Conversion stride_conversions[] = { - CONVERT (I420, NV12, convert_i420_nv12), - CONVERT (I420, YUY2, convert_i420_yuy2), - CONVERT (RGB16, RGB16, convert_rgb16_rgb16), -+ CONVERT (RGBx, RGBx, convert_rgb32_rgb32), -+ CONVERT (BGRx, BGRx, convert_rgb32_rgb32), -+ CONVERT (xRGB, xRGB, convert_rgb32_rgb32), -+ CONVERT (xBGR, xBGR, convert_rgb32_rgb32), -+ CONVERT (RGBA, RGBA, convert_rgb32_rgb32), -+ CONVERT (BGRA, BGRA, convert_rgb32_rgb32), -+ CONVERT (ARGB, ARGB, convert_rgb32_rgb32), -+ CONVERT (ABGR, ABGR, convert_rgb32_rgb32), - /* add new entries before here */ - {{GST_VIDEO_FORMAT_UNKNOWN}} - }; --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0023-ffmpegcolorspace-support-for-rowstride.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0023-ffmpegcolorspace-support-for-rowstride.patch deleted file mode 100644 index d81de9c..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0023-ffmpegcolorspace-support-for-rowstride.patch +++ /dev/null @@ -1,410 +0,0 @@ -From 379447918aafc7f38a79219511764f6c04a2cbf9 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 24 Dec 2010 20:55:43 -0600 -Subject: [PATCH 23/24] ffmpegcolorspace: support for rowstride - ---- - gst/ffmpegcolorspace/avcodec.h | 2 +- - gst/ffmpegcolorspace/gstffmpegcodecmap.c | 85 +++++++++++++++++++-------- - gst/ffmpegcolorspace/gstffmpegcodecmap.h | 1 + - gst/ffmpegcolorspace/gstffmpegcolorspace.c | 30 ++++++++-- - gst/ffmpegcolorspace/gstffmpegcolorspace.h | 1 + - gst/ffmpegcolorspace/imgconvert.c | 12 ++-- - 6 files changed, 93 insertions(+), 38 deletions(-) - -diff --git a/gst/ffmpegcolorspace/avcodec.h b/gst/ffmpegcolorspace/avcodec.h -index 57f551c..a4928ee 100644 ---- a/gst/ffmpegcolorspace/avcodec.h -+++ b/gst/ffmpegcolorspace/avcodec.h -@@ -217,7 +217,7 @@ typedef struct AVPaletteControl { - - } AVPaletteControl; - --int avpicture_get_size(int pix_fmt, int width, int height); -+int avpicture_get_size(int pix_fmt, int width, int height, int stride); - - void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift); - const char *avcodec_get_pix_fmt_name(int pix_fmt); -diff --git a/gst/ffmpegcolorspace/gstffmpegcodecmap.c b/gst/ffmpegcolorspace/gstffmpegcodecmap.c -index 318a90e..9c6a123 100644 ---- a/gst/ffmpegcolorspace/gstffmpegcodecmap.c -+++ b/gst/ffmpegcolorspace/gstffmpegcodecmap.c -@@ -619,7 +619,8 @@ gst_ffmpeg_caps_to_pixfmt (const GstCaps * caps, - if (!raw) - return; - -- if (gst_structure_has_name (structure, "video/x-raw-yuv")) { -+ if (gst_structure_has_name (structure, "video/x-raw-yuv") || -+ gst_structure_has_name (structure, "video/x-raw-yuv-strided")) { - guint32 fourcc; - - if (gst_structure_get_fourcc (structure, "format", &fourcc)) { -@@ -828,10 +829,10 @@ gst_ffmpegcsp_caps_with_codectype (enum CodecType type, - int - gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - uint8_t * ptr, enum PixelFormat pix_fmt, int width, int height, -- int interlaced) -+ int stride, int interlaced) - { - int size, w2, h2, size2; -- int stride, stride2; -+ int stride2; - PixFmtInfo *pinfo; - - pinfo = get_pix_fmt_info (pix_fmt); -@@ -847,11 +848,15 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - case PIX_FMT_YUVJ420P: - case PIX_FMT_YUVJ422P: - case PIX_FMT_YUVJ444P: -- stride = GST_ROUND_UP_4 (width); - h2 = ROUND_UP_X (height, pinfo->y_chroma_shift); -- size = stride * h2; - w2 = DIV_ROUND_UP_X (width, pinfo->x_chroma_shift); -- stride2 = GST_ROUND_UP_4 (w2); -+ if (stride) { -+ stride2 = stride; -+ } else { -+ stride = GST_ROUND_UP_4 (width); -+ stride2 = GST_ROUND_UP_4 (w2); -+ } -+ size = stride * h2; - h2 = DIV_ROUND_UP_X (height, pinfo->y_chroma_shift); - size2 = stride2 * h2; - picture->data[0] = ptr; -@@ -864,11 +869,15 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - /* PIX_FMT_YVU420P = YV12: same as PIX_FMT_YUV420P, but - * with U and V plane swapped. Strides as in videotestsrc */ - case PIX_FMT_YUVA420P: -- stride = GST_ROUND_UP_4 (width); - h2 = ROUND_UP_X (height, pinfo->y_chroma_shift); -- size = stride * h2; - w2 = DIV_ROUND_UP_X (width, pinfo->x_chroma_shift); -- stride2 = GST_ROUND_UP_4 (w2); -+ if (stride) { -+ stride2 = stride; -+ } else { -+ stride = GST_ROUND_UP_4 (width); -+ stride2 = GST_ROUND_UP_4 (w2); -+ } -+ size = stride * h2; - h2 = DIV_ROUND_UP_X (height, pinfo->y_chroma_shift); - size2 = stride2 * h2; - picture->data[0] = ptr; -@@ -882,11 +891,15 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - return 2 * size + 2 * size2; - case PIX_FMT_YVU410P: - case PIX_FMT_YVU420P: -- stride = GST_ROUND_UP_4 (width); - h2 = ROUND_UP_X (height, pinfo->y_chroma_shift); -- size = stride * h2; - w2 = DIV_ROUND_UP_X (width, pinfo->x_chroma_shift); -- stride2 = GST_ROUND_UP_4 (w2); -+ if (stride) { -+ stride2 = stride; -+ } else { -+ stride = GST_ROUND_UP_4 (width); -+ stride2 = GST_ROUND_UP_4 (w2); -+ } -+ size = stride * h2; - h2 = DIV_ROUND_UP_X (height, pinfo->y_chroma_shift); - size2 = stride2 * h2; - picture->data[0] = ptr; -@@ -898,11 +911,15 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - return size + 2 * size2; - case PIX_FMT_NV12: - case PIX_FMT_NV21: -- stride = GST_ROUND_UP_4 (width); - h2 = ROUND_UP_X (height, pinfo->y_chroma_shift); -- size = stride * h2; - w2 = 2 * DIV_ROUND_UP_X (width, pinfo->x_chroma_shift); -- stride2 = GST_ROUND_UP_4 (w2); -+ if (stride) { -+ stride2 = stride; -+ } else { -+ stride = GST_ROUND_UP_4 (width); -+ stride2 = GST_ROUND_UP_4 (w2); -+ } -+ size = stride * h2; - h2 = DIV_ROUND_UP_X (height, pinfo->y_chroma_shift); - size2 = stride2 * h2; - picture->data[0] = ptr; -@@ -914,7 +931,9 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - return size + size2; - case PIX_FMT_RGB24: - case PIX_FMT_BGR24: -- stride = GST_ROUND_UP_4 (width * 3); -+ if (!stride) { -+ stride = GST_ROUND_UP_4 (width * 3); -+ } - size = stride * height; - picture->data[0] = ptr; - picture->data[1] = NULL; -@@ -930,7 +949,9 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - case PIX_FMT_ABGR32: - case PIX_FMT_xRGB32: - case PIX_FMT_BGRx32: -- stride = width * 4; -+ if (!stride) { -+ stride = width * 4; -+ } - size = stride * height; - picture->data[0] = ptr; - picture->data[1] = NULL; -@@ -942,7 +963,9 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - case PIX_FMT_YUV422: - case PIX_FMT_UYVY422: - case PIX_FMT_YVYU422: -- stride = GST_ROUND_UP_4 (width * 2); -+ if (!stride) { -+ stride = GST_ROUND_UP_4 (width * 2); -+ } - size = stride * height; - picture->data[0] = ptr; - picture->data[1] = NULL; -@@ -950,7 +973,9 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - picture->linesize[0] = stride; - return size; - case PIX_FMT_V308: -- stride = GST_ROUND_UP_4 (width * 3); -+ if (!stride) { -+ stride = GST_ROUND_UP_4 (width * 3); -+ } - size = stride * height; - picture->data[0] = ptr; - picture->data[1] = NULL; -@@ -958,8 +983,10 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - picture->linesize[0] = stride; - return size; - case PIX_FMT_UYVY411: -- stride = -- GST_ROUND_UP_4 (GST_ROUND_UP_4 (width) + GST_ROUND_UP_4 (width) / 2); -+ if (!stride) { -+ stride = GST_ROUND_UP_4 (GST_ROUND_UP_4 (width) + -+ GST_ROUND_UP_4 (width) / 2); -+ } - size = stride * height; - picture->data[0] = ptr; - picture->data[1] = NULL; -@@ -968,7 +995,9 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - return size; - case PIX_FMT_Y800: - case PIX_FMT_GRAY8: -- stride = GST_ROUND_UP_4 (width); -+ if (!stride) { -+ stride = GST_ROUND_UP_4 (width); -+ } - size = stride * height; - picture->data[0] = ptr; - picture->data[1] = NULL; -@@ -978,7 +1007,9 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - case PIX_FMT_Y16: - case PIX_FMT_GRAY16_L: - case PIX_FMT_GRAY16_B: -- stride = GST_ROUND_UP_4 (width * 2); -+ if (!stride) { -+ stride = GST_ROUND_UP_4 (width * 2); -+ } - size = stride * height; - picture->data[0] = ptr; - picture->data[1] = NULL; -@@ -987,7 +1018,9 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - return size; - case PIX_FMT_MONOWHITE: - case PIX_FMT_MONOBLACK: -- stride = GST_ROUND_UP_4 ((width + 7) >> 3); -+ if (!stride) { -+ stride = GST_ROUND_UP_4 ((width + 7) >> 3); -+ } - size = stride * height; - picture->data[0] = ptr; - picture->data[1] = NULL; -@@ -996,7 +1029,9 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - return size; - case PIX_FMT_PAL8: - /* already forced to be with stride, so same result as other function */ -- stride = GST_ROUND_UP_4 (width); -+ if (!stride) { -+ stride = GST_ROUND_UP_4 (width); -+ } - size = stride * height; - picture->data[0] = ptr; - picture->data[1] = ptr + size; /* palette is stored here as 256 32 bit words */ -diff --git a/gst/ffmpegcolorspace/gstffmpegcodecmap.h b/gst/ffmpegcolorspace/gstffmpegcodecmap.h -index 515f530..bcd212a 100644 ---- a/gst/ffmpegcolorspace/gstffmpegcodecmap.h -+++ b/gst/ffmpegcolorspace/gstffmpegcodecmap.h -@@ -52,6 +52,7 @@ gst_ffmpegcsp_avpicture_fill (AVPicture * picture, - enum PixelFormat pix_fmt, - int width, - int height, -+ int stride, - int interlaced); - - #endif /* __GST_FFMPEG_CODECMAP_H__ */ -diff --git a/gst/ffmpegcolorspace/gstffmpegcolorspace.c b/gst/ffmpegcolorspace/gstffmpegcolorspace.c -index 4ba0204..63430a0 100644 ---- a/gst/ffmpegcolorspace/gstffmpegcolorspace.c -+++ b/gst/ffmpegcolorspace/gstffmpegcolorspace.c -@@ -48,6 +48,10 @@ GST_DEBUG_CATEGORY (ffmpegcolorspace_performance); - "video/x-raw-yuv, width = "GST_VIDEO_SIZE_RANGE" , " \ - "height="GST_VIDEO_SIZE_RANGE",framerate="GST_VIDEO_FPS_RANGE"," \ - "format= (fourcc) { I420 , NV12 , NV21 , YV12 , YUY2 , Y42B , Y444 , YUV9 , YVU9 , Y41B , Y800 , Y8 , GREY , Y16 , UYVY , YVYU , IYU1 , v308 , AYUV, A420} ;" \ -+ "video/x-raw-yuv-strided, width = "GST_VIDEO_SIZE_RANGE" , " \ -+ "height="GST_VIDEO_SIZE_RANGE",framerate="GST_VIDEO_FPS_RANGE"," \ -+ "rowstride="GST_VIDEO_SIZE_RANGE"," \ -+ "format= (fourcc) { I420 , NV12 , NV21 , YV12 , YUY2 , Y42B , Y444 , YUV9 , YVU9 , Y41B , Y800 , Y8 , GREY , Y16 , UYVY , YVYU , IYU1 , v308 , AYUV, A420} ;" \ - GST_VIDEO_CAPS_RGB";" \ - GST_VIDEO_CAPS_BGR";" \ - GST_VIDEO_CAPS_RGBx";" \ -@@ -205,8 +209,8 @@ gst_ffmpegcsp_set_caps (GstBaseTransform * btrans, GstCaps * incaps, - { - GstFFMpegCsp *space; - GstStructure *structure; -- gint in_height, in_width; -- gint out_height, out_width; -+ gint in_height, in_width, in_stride = 0; -+ gint out_height, out_width, out_stride = 0; - const GValue *in_framerate = NULL; - const GValue *out_framerate = NULL; - const GValue *in_par = NULL; -@@ -225,6 +229,10 @@ gst_ffmpegcsp_set_caps (GstBaseTransform * btrans, GstCaps * incaps, - if (!res) - goto no_width_height; - -+ /* stride is optional: */ -+ if (gst_structure_has_name (structure, "video/x-raw-yuv-strided")) -+ gst_structure_get_int (structure, "rowstride", &in_stride); -+ - /* and framerate */ - in_framerate = gst_structure_get_value (structure, "framerate"); - if (in_framerate == NULL || !GST_VALUE_HOLDS_FRACTION (in_framerate)) -@@ -241,6 +249,10 @@ gst_ffmpegcsp_set_caps (GstBaseTransform * btrans, GstCaps * incaps, - if (!res) - goto no_width_height; - -+ /* stride is optional: */ -+ if (gst_structure_has_name (structure, "video/x-raw-yuv-strided")) -+ gst_structure_get_int (structure, "rowstride", &out_stride); -+ - /* and framerate */ - out_framerate = gst_structure_get_value (structure, "framerate"); - if (out_framerate == NULL || !GST_VALUE_HOLDS_FRACTION (out_framerate)) -@@ -263,6 +275,8 @@ gst_ffmpegcsp_set_caps (GstBaseTransform * btrans, GstCaps * incaps, - - space->width = ctx->width = in_width; - space->height = ctx->height = in_height; -+ space->in_stride = in_stride; -+ space->out_stride = out_stride; - - space->interlaced = FALSE; - gst_structure_get_boolean (structure, "interlaced", &space->interlaced); -@@ -401,7 +415,7 @@ gst_ffmpegcsp_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, - GstStructure *structure = NULL; - AVCodecContext *ctx = NULL; - gboolean ret = TRUE; -- gint width, height; -+ gint width, height, stride = 0; - - g_assert (size); - -@@ -409,6 +423,10 @@ gst_ffmpegcsp_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, - gst_structure_get_int (structure, "width", &width); - gst_structure_get_int (structure, "height", &height); - -+ /* stride is optional: */ -+ if (gst_structure_has_name (structure, "video/x-raw-yuv-strided")) -+ gst_structure_get_int (structure, "rowstride", &stride); -+ - ctx = avcodec_alloc_context (); - - g_assert (ctx != NULL); -@@ -422,7 +440,7 @@ gst_ffmpegcsp_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, - goto beach; - } - -- *size = avpicture_get_size (ctx->pix_fmt, width, height); -+ *size = avpicture_get_size (ctx->pix_fmt, width, height, stride); - - /* ffmpeg frames have the palette after the frame data, whereas - * GStreamer currently puts it into the caps as 'palette_data' field, -@@ -460,7 +478,7 @@ gst_ffmpegcsp_transform (GstBaseTransform * btrans, GstBuffer * inbuf, - /* fill from with source data */ - gst_ffmpegcsp_avpicture_fill (&space->from_frame, - GST_BUFFER_DATA (inbuf), space->from_pixfmt, space->width, space->height, -- space->interlaced); -+ space->in_stride, space->interlaced); - - /* fill optional palette */ - if (space->palette) -@@ -469,7 +487,7 @@ gst_ffmpegcsp_transform (GstBaseTransform * btrans, GstBuffer * inbuf, - /* fill target frame */ - gst_ffmpegcsp_avpicture_fill (&space->to_frame, - GST_BUFFER_DATA (outbuf), space->to_pixfmt, space->width, space->height, -- space->interlaced); -+ space->out_stride, space->interlaced); - - /* and convert */ - result = img_convert (&space->to_frame, space->to_pixfmt, -diff --git a/gst/ffmpegcolorspace/gstffmpegcolorspace.h b/gst/ffmpegcolorspace/gstffmpegcolorspace.h -index 198ab8a..bd5e01c 100644 ---- a/gst/ffmpegcolorspace/gstffmpegcolorspace.h -+++ b/gst/ffmpegcolorspace/gstffmpegcolorspace.h -@@ -46,6 +46,7 @@ struct _GstFFMpegCsp { - GstVideoFilter element; - - gint width, height; -+ gint in_stride, out_stride; - gboolean interlaced; - gfloat fps; - enum PixelFormat from_pixfmt, to_pixfmt; -diff --git a/gst/ffmpegcolorspace/imgconvert.c b/gst/ffmpegcolorspace/imgconvert.c -index cb145bb..414c4a0 100644 ---- a/gst/ffmpegcolorspace/imgconvert.c -+++ b/gst/ffmpegcolorspace/imgconvert.c -@@ -594,12 +594,12 @@ avpicture_layout (const AVPicture * src, int pix_fmt, int width, int height, - #endif - - int --avpicture_get_size (int pix_fmt, int width, int height) -+avpicture_get_size (int pix_fmt, int width, int height, int stride) - { - AVPicture dummy_pict; - - return gst_ffmpegcsp_avpicture_fill (&dummy_pict, NULL, pix_fmt, width, -- height, FALSE); -+ height, stride, FALSE); - } - - /** -@@ -3518,16 +3518,16 @@ get_convert_table_entry (int src_pix_fmt, int dst_pix_fmt) - - static int - avpicture_alloc (AVPicture * picture, int pix_fmt, int width, int height, -- int interlaced) -+ int stride, int interlaced) - { - unsigned int size; - void *ptr; - -- size = avpicture_get_size (pix_fmt, width, height); -+ size = avpicture_get_size (pix_fmt, width, height, stride); - ptr = av_malloc (size); - if (!ptr) - goto fail; -- gst_ffmpegcsp_avpicture_fill (picture, ptr, pix_fmt, width, height, -+ gst_ffmpegcsp_avpicture_fill (picture, ptr, pix_fmt, width, height, stride, - interlaced); - return 0; - fail: -@@ -3775,7 +3775,7 @@ no_chroma_filter: - else - int_pix_fmt = PIX_FMT_RGB24; - } -- if (avpicture_alloc (tmp, int_pix_fmt, dst_width, dst_height, -+ if (avpicture_alloc (tmp, int_pix_fmt, dst_width, dst_height, 0, - dst->interlaced) < 0) - return -1; - ret = -1; --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/files/gst-0.10.32-0024-discoverer-rowstride-support.patch b/media-libs/gst-plugins-base/files/gst-0.10.32-0024-discoverer-rowstride-support.patch deleted file mode 100644 index ebe1b6f..0000000 --- a/media-libs/gst-plugins-base/files/gst-0.10.32-0024-discoverer-rowstride-support.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 3bb025f5ba20aeb5d2fa575e4a78ea61e3bf5c1b Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Wed, 5 Jan 2011 11:40:03 -0600 -Subject: [PATCH 24/24] discoverer: rowstride support - ---- - gst-libs/gst/pbutils/gstdiscoverer.c | 8 ++++---- - 1 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c -index 8422d8f..2176196 100644 ---- a/gst-libs/gst/pbutils/gstdiscoverer.c -+++ b/gst-libs/gst/pbutils/gstdiscoverer.c -@@ -558,7 +558,7 @@ collect_information (GstDiscoverer * dc, const GstStructure * st, - GstCaps *caps; - GstStructure *caps_st, *tags_st; - const gchar *name; -- int tmp, tmp2; -+ int tmp, tmp2, tmp3; - guint utmp; - gboolean btmp; - -@@ -626,7 +626,7 @@ collect_information (GstDiscoverer * dc, const GstStructure * st, - info->parent.caps = caps; - } - -- if (gst_video_format_parse_caps (caps, &format, &tmp, &tmp2)) { -+ if (gst_video_format_parse_caps_strided (caps, &format, &tmp, &tmp2, &tmp3)) { - info->width = (guint) tmp; - info->height = (guint) tmp2; - } -@@ -930,8 +930,8 @@ discoverer_collect (GstDiscoverer * dc) - gst_caps_get_structure (dc->priv->current_info->stream_info->caps, 0); - - if (g_str_has_prefix (gst_structure_get_name (st), "image/")) -- ((GstDiscovererVideoInfo *) dc->priv->current_info-> -- stream_info)->is_image = TRUE; -+ ((GstDiscovererVideoInfo *) dc->priv->current_info->stream_info)-> -+ is_image = TRUE; - } - } - --- -1.7.1 - diff --git a/media-libs/gst-plugins-base/gst-plugins-base-0.10.32_p20110127.ebuild b/media-libs/gst-plugins-base/gst-plugins-base-0.10.32_p20110127.ebuild deleted file mode 100644 index 93160d5..0000000 --- a/media-libs/gst-plugins-base/gst-plugins-base-0.10.32_p20110127.ebuild +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI=1 - -# order is important, gnome2 after gst-plugins -inherit gst-plugins-base gst-plugins10 gnome2 flag-o-matic autotools eutils -# libtool - -DESCRIPTION="Basepack of plugins for gstreamer" -HOMEPAGE="http://gstreamer.sourceforge.net" -MY_P=${P%%_*} -SRC_URI="http://gstreamer.freedesktop.org/src/${PN}/${MY_P}.tar.bz2" -S="${WORKDIR}/${MY_P}" - -LICENSE="GPL-2" -KEYWORDS="~alpha ~amd64 arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd ~x86-freebsd ~x86-interix ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris" -IUSE="+introspection +orc" - -RDEPEND=">=dev-libs/glib-2.20 - =media-libs/gstreamer-0.10.32_p20110127 - dev-libs/libxml2 - app-text/iso-codes - orc? ( >=dev-lang/orc-0.4.5 ) - !<media-libs/gst-plugins-bad-0.10.10" -DEPEND="${RDEPEND} - dev-util/pkgconfig - dev-util/gtk-doc-am" - -GST_PLUGINS_BUILD="" - -DOCS="AUTHORS NEWS README RELEASE" - -src_unpack() { - unpack ${A} - cd "${S}" - epatch "${FILESDIR}"/gst-0.10.32-0001-add-rowstride-support-to-video-utility-functions.patch - epatch "${FILESDIR}"/gst-0.10.32-0002-stridetransform-skeletal-implementation-of-stridetra.patch - epatch "${FILESDIR}"/gst-0.10.32-0003-stridetransform-implement-caps-negotiation-and-relat.patch - epatch "${FILESDIR}"/gst-0.10.32-0004-stridetransform-implement-transform-function.patch - epatch "${FILESDIR}"/gst-0.10.32-0005-add-gst_stride_transform_transform_size.patch - epatch "${FILESDIR}"/gst-0.10.32-0006-fix-a-small-typo.-need-to-use-the-smaller-of-new_wid.patch - epatch "${FILESDIR}"/gst-0.10.32-0007-Add-NV12-support-in-stridetransform.patch - epatch "${FILESDIR}"/gst-0.10.32-0008-add-basic-support-for-I420-NV12-colorspace-conversio.patch - epatch "${FILESDIR}"/gst-0.10.32-0009-fix-to-avoid-parsing-caps-on-every-frame.patch - epatch "${FILESDIR}"/gst-0.10.32-0010-refactor-stridetransform-to-make-it-easier-to-add-ne.patch - epatch "${FILESDIR}"/gst-0.10.32-0011-add-some-neon.patch - epatch "${FILESDIR}"/gst-0.10.32-0012-add-support-to-convert-to-YUY2-YUYV-color-format.patch - epatch "${FILESDIR}"/gst-0.10.32-0013-Add-support-for-RGB565-to-stridetransform.patch - epatch "${FILESDIR}"/gst-0.10.32-0014-stridetransform-updates-for-new-extra-anal-compiler-.patch - epatch "${FILESDIR}"/gst-0.10.32-0015-stridetransform-fix-problem-transforming-caps-with-l.patch - epatch "${FILESDIR}"/gst-0.10.32-0016-modify-playbin-to-use-stridetransform.patch - epatch "${FILESDIR}"/gst-0.10.32-0017-playbin-disable-interlaced-support.patch - epatch "${FILESDIR}"/gst-0.10.32-0018-textoverlay-add-stride-support.patch - epatch "${FILESDIR}"/gst-0.10.32-0019-video-more-flexible-video-caps-utility.patch - epatch "${FILESDIR}"/gst-0.10.32-0020-video-fix-endianess-issue-for-16bit-RGB-formats.patch - epatch "${FILESDIR}"/gst-0.10.32-0021-stride-more-flexible-stride-color-conversion.patch - epatch "${FILESDIR}"/gst-0.10.32-0022-stride-support-for-32bit-RGB-formats.patch - epatch "${FILESDIR}"/gst-0.10.32-0023-ffmpegcolorspace-support-for-rowstride.patch - eautoreconf -} - -src_compile() { - # gst doesnt handle opts well, last tested with 0.10.15 - strip-flags - replace-flags "-O3" "-O2" - - gst-plugins-base_src_configure \ - --disable-nls \ - $(use_enable introspection) \ - $(use_enable orc) - emake || die "emake failed." -} - -src_install() { - gnome2_src_install -} diff --git a/media-libs/gst-plugins-good/Manifest b/media-libs/gst-plugins-good/Manifest deleted file mode 100644 index 6f92a4e..0000000 --- a/media-libs/gst-plugins-good/Manifest +++ /dev/null @@ -1,14 +0,0 @@ -AUX gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch 1699 RMD160 ee58e52c89ed3ac10ece5f24b2607461f693abb3 SHA1 5f93921349aa383b9f9a70f1ce62128eda6d9411 SHA256 b99e9322ba836e6de4df144ff5a6454bb4175a84713a9610fce3ff83402f82d5 -AUX gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch 4255 RMD160 fe2024baf7398c83cec0c0adfdd649733a967482 SHA1 483ec498ce795764475b7e486560ae43ac12737c SHA256 08595843b8fddb76661aaec9b3d84791edf72226dc323050ca94ed1aebc49949 -AUX gst-0.10.27-0003-v4l2sink-Add-flip-property.patch 5880 RMD160 1fc14e374dc56b52cc16d189c3b87e0508b323fb SHA1 8475701469ea33dc355a0a030dc20a5d9a2a0e2f SHA256 42864937012aaede7fbd0ebd78b06be6b6326f99a0770ec6ec6ac57426004445 -AUX gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch 2205 RMD160 da01e8eb31d528971113679984e51f9e7d7e0326 SHA1 07ad77fe137d8c4548320f582d3cc88928e943c2 SHA256 7cca5ec0adf3ac20c7a400bf209523c9135cadb9292cbd219b631d588a3800af -AUX gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch 1136 RMD160 2ba17fb3194790c60ab297a3cfbde4089575555d SHA1 f18af7103413df180b3eab08c4abe655d7a63ed3 SHA256 fa8486abf8bd9c12d2d29fe3077485e1ca77af9e39ef4a9b48a7d1ea696c2d85 -AUX gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch 884 RMD160 5e18ee173f9749a46de9a146a4c6e0113f02281d SHA1 1bfab5660c9f5354eb6daed48a965824675bc07a SHA256 1cfcd14afba356fd6c6180b8f1018174e392d9cc9690870f5dd06918ef3454e5 -AUX gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch 3392 RMD160 a7a197667a9fd0ca8d47125a8205f58f81e110cb SHA1 b650b0474355775a5bcb5b89090798e226786632 SHA256 5621c6c3c1a4a49c62faeffbe320e76a4c45d5ecf6c3ecb29adbe2eed25c64b4 -AUX gst-0.10.27-0008-add-rowstride-support.patch 20547 RMD160 cb4bf8074160cad277ba5754427a79cf42a139ed SHA1 60ac23640e799e558fce406e650ebe47b27645c4 SHA256 7ba17339344fe2f0b8e665cd1fd41e96c6543f2d38c4eeffbd071c6c2c21d407 -AUX gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch 4209 RMD160 7b827d6d1cb40f10bb25e0dedf8791884bd60bb5 SHA1 f1c47e70898c8480ce25e5ec6c90308c45cb77f7 SHA256 877141058a3662aa6c065003a048908eb5459206dd7d4cd68d46ba51bfd448a8 -AUX gst-0.10.27-0010-v4l2-prefer-NV12.patch 955 RMD160 1f8da679aa6562a8b7838a301dc98767f543ee12 SHA1 0fe801306c6dad176ef78f4269ecf99f6b270cb5 SHA256 2ddf29274b7f7d8b1ac1f2ed68c56485dddb000e82d12288e50b0acc12ffb0ec -AUX gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch 1938 RMD160 edb01fb57a548a6a6af67f016eea16d47337d0e0 SHA1 c80bbe19a4f6ad44967d077e4ee109094b5061bd SHA256 ad26b737d21721882a6c0de9011ac30984450b4ba213dc5045e9dfff9d2180fc -AUX gst-0.10.27-0099-v4l2sink-Disable-rotation-code-when-not-found.patch 3484 RMD160 42b0d964871066c9203cdaf8aa79c4a08f8bef33 SHA1 2502fd3e41ecda556868785540d993e45872d7bc SHA256 a7981181b78cbbf2b717d2b09a177859a99f2a75f76f1c146549955d0bc300b9 -DIST gst-plugins-good-0.10.27.tar.bz2 3096221 RMD160 6486fca87a6394577ab1f0a4e94a19b1c3e2ca5e SHA1 49964ad3b8fbee9caa0b3fc437dd9169aafad79d SHA256 a9d801c3d42b456a6ebc0b95f68c44f153f756ec0fbd4877197c469cc67771fa -EBUILD gst-plugins-good-0.10.27_p20110127.ebuild 2912 RMD160 9b8e627d4d2383464f1090c97fc3dd68b9a2c4ba SHA1 f4392e673c6c878c505e2ab33072a54d1d9fd12f SHA256 203dfad6d89aaa3860810d0eefd6d518e0cbe91757542d28519e719e65a11327 diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch deleted file mode 100644 index f2d85ef..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 194aa8513c02fbfcabf04b45ff4c81bf8a94527f Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Tue, 14 Sep 2010 07:42:50 -0500 -Subject: [PATCH 01/11] v4l2: fix handling of RGB32/BGR32 formats - -bpp is 32, but depth is only 24.. ---- - sys/v4l2/gstv4l2object.c | 12 +++++++----- - 1 files changed, 7 insertions(+), 5 deletions(-) - -diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c -index 7e15489..f5672b5 100644 ---- a/sys/v4l2/gstv4l2object.c -+++ b/sys/v4l2/gstv4l2object.c -@@ -1132,14 +1132,16 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) - b_mask = 0xff0000; - break; - case V4L2_PIX_FMT_RGB32: -- bpp = depth = 32; -+ depth = 24; -+ bpp = 32; - endianness = G_BIG_ENDIAN; - r_mask = 0xff000000; - g_mask = 0x00ff0000; - b_mask = 0x0000ff00; - break; - case V4L2_PIX_FMT_BGR32: -- bpp = depth = 32; -+ depth = 24; -+ bpp = 32; - endianness = G_BIG_ENDIAN; - r_mask = 0x000000ff; - g_mask = 0x0000ff00; -@@ -1404,13 +1406,13 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - #endif - } - } else if (!strcmp (mimetype, "video/x-raw-rgb")) { -- gint depth, endianness, r_mask; -+ gint bpp, endianness, r_mask; - -- gst_structure_get_int (structure, "depth", &depth); -+ gst_structure_get_int (structure, "bpp", &bpp); - gst_structure_get_int (structure, "endianness", &endianness); - gst_structure_get_int (structure, "red_mask", &r_mask); - -- switch (depth) { -+ switch (bpp) { - case 8: - fourcc = V4L2_PIX_FMT_RGB332; - break; --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch deleted file mode 100644 index 11b777c..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch +++ /dev/null @@ -1,128 +0,0 @@ -From d43a9444fc5f7655a8acd2978039667a04222ba0 Mon Sep 17 00:00:00 2001 -From: Kiran Nataraju <knataraju@ti.com> -Date: Fri, 27 Aug 2010 09:00:57 +0200 -Subject: [PATCH 02/11] v4l2sink: Add rotation support. - -Signed-off-by: Kiran Nataraju <knataraju@ti.com> -Signed-off-by: Daniel Diaz <ddiaz@ti.com> ---- - sys/v4l2/gstv4l2sink.c | 34 ++++++++++++++++++++++++++++++++++ - sys/v4l2/gstv4l2sink.h | 1 + - 2 files changed, 35 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index aa6785c..5abf915 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -72,6 +72,10 @@ GST_DEBUG_CATEGORY (v4l2sink_debug); - #define PROP_DEF_MIN_QUEUED_BUFS 1 - #define DEFAULT_PROP_DEVICE "/dev/video1" - -+#define MIN_ROTATION_ANGLE 0 -+#define MAX_ROTATION_ANGLE 360 -+#define DEFAULT_ROTATION_ANGLE 0 -+ - enum - { - PROP_0, -@@ -86,6 +90,7 @@ enum - PROP_CROP_LEFT, - PROP_CROP_WIDTH, - PROP_CROP_HEIGHT, -+ PROP_ROTATION, - }; - - -@@ -220,6 +225,7 @@ static GstFlowReturn gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); - static GstFlowReturn gst_v4l2sink_show_frame (GstBaseSink * bsink, - GstBuffer * buf); -+static void gst_v4l2sink_set_rotation (GstV4l2Sink * v4l2sink); - - static void - gst_v4l2sink_base_init (gpointer g_class) -@@ -306,6 +312,11 @@ gst_v4l2sink_class_init (GstV4l2SinkClass * klass) - "The height of the video crop; default is equal to negotiated image height", - 0, 0xffffffff, 0, G_PARAM_READWRITE)); - -+ g_object_class_install_property (gobject_class, PROP_ROTATION, -+ g_param_spec_int ("rotation", "Rotation angle", -+ "Rotation angle for the image", MIN_ROTATION_ANGLE, -+ MAX_ROTATION_ANGLE, DEFAULT_ROTATION_ANGLE, G_PARAM_READWRITE)); -+ - basesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_get_caps); - basesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_set_caps); - basesink_class->buffer_alloc = GST_DEBUG_FUNCPTR (gst_v4l2sink_buffer_alloc); -@@ -336,6 +347,7 @@ gst_v4l2sink_init (GstV4l2Sink * v4l2sink, GstV4l2SinkClass * klass) - v4l2sink->overlay_fields_set = 0; - v4l2sink->crop_fields_set = 0; - v4l2sink->state = 0; -+ v4l2sink->rotation = 0; - } - - -@@ -475,6 +487,20 @@ gst_v4l2sink_sync_crop_fields (GstV4l2Sink * v4l2sink) - } - } - -+static void -+gst_v4l2sink_set_rotation (GstV4l2Sink * v4l2sink) -+{ -+ if (GST_V4L2_IS_OPEN (v4l2sink->v4l2object)) { -+ struct v4l2_control control; -+ gint fd = v4l2sink->v4l2object->video_fd; -+ -+ memset (&control, 0x00, sizeof (struct v4l2_control)); -+ control.id = V4L2_CID_ROTATE; -+ control.value = v4l2sink->rotation; -+ g_return_if_fail (v4l2_ioctl (fd, VIDIOC_S_CTRL, &control) >= 0); -+ } -+} -+ - - static void - gst_v4l2sink_set_property (GObject * object, -@@ -531,6 +557,10 @@ gst_v4l2sink_set_property (GObject * object, - v4l2sink->crop_fields_set |= RECT_HEIGHT_SET; - gst_v4l2sink_sync_crop_fields (v4l2sink); - break; -+ case PROP_ROTATION: -+ v4l2sink->rotation = g_value_get_int (value); -+ gst_v4l2sink_set_rotation (v4l2sink); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -578,6 +608,9 @@ gst_v4l2sink_get_property (GObject * object, - case PROP_CROP_HEIGHT: - g_value_set_uint (value, v4l2sink->crop.height); - break; -+ case PROP_ROTATION: -+ g_value_set_int (value, v4l2sink->rotation); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -600,6 +633,7 @@ gst_v4l2sink_change_state (GstElement * element, GstStateChange transition) - /* open the device */ - if (!gst_v4l2_object_start (v4l2sink->v4l2object)) - return GST_STATE_CHANGE_FAILURE; -+ gst_v4l2sink_set_rotation (v4l2sink); - break; - default: - break; -diff --git a/sys/v4l2/gstv4l2sink.h b/sys/v4l2/gstv4l2sink.h -index 8fe8222..1239621 100644 ---- a/sys/v4l2/gstv4l2sink.h -+++ b/sys/v4l2/gstv4l2sink.h -@@ -75,6 +75,7 @@ struct _GstV4l2Sink { - guint8 overlay_fields_set, crop_fields_set; - - guint8 state; -+ gint rotation; - }; - - struct _GstV4l2SinkClass { --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0003-v4l2sink-Add-flip-property.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0003-v4l2sink-Add-flip-property.patch deleted file mode 100644 index 9bdfa51..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0003-v4l2sink-Add-flip-property.patch +++ /dev/null @@ -1,187 +0,0 @@ -From 1381c64fd606d8ab7169eef52386139a4848c439 Mon Sep 17 00:00:00 2001 -From: Kiran Nataraju <knataraju@ti.com> -Date: Tue, 21 Sep 2010 06:21:23 +0200 -Subject: [PATCH 03/11] v4l2sink: Add flip property. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Kiran Nataraju <knataraju@ti.com> -Signed-off-by: Daniel Díaz <yosoy@danieldiaz.org> ---- - sys/v4l2/gstv4l2sink.c | 88 +++++++++++++++++++++++++++++++++++++++++++++-- - sys/v4l2/gstv4l2sink.h | 1 + - 2 files changed, 85 insertions(+), 4 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 5abf915..6163747 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -91,6 +91,7 @@ enum - PROP_CROP_WIDTH, - PROP_CROP_HEIGHT, - PROP_ROTATION, -+ PROP_FLIP, - }; - - -@@ -129,6 +130,34 @@ gst_v4l2sink_iface_supported (GstImplementsInterface * iface, GType iface_type) - return TRUE; - } - -+/* -+ * Flip state -+ */ -+enum -+{ -+ FLIP_NONE = 0, -+ FLIP_HORIZONTAL = 1, -+ FLIP_VERTICAL = 2, -+}; -+ -+#define GST_TYPE_V4L2_FLIP (gst_v4l2_flip_get_type ()) -+static GType -+gst_v4l2_flip_get_type (void) -+{ -+ static GType type = 0; -+ -+ if (!type) { -+ static GEnumValue vals[] = { -+ {FLIP_NONE, "No Flip", "none"}, -+ {FLIP_HORIZONTAL, "Horizontal Flip", "horiz"}, -+ {FLIP_VERTICAL, "Vertical Flip", "vert"}, -+ {0, NULL, NULL}, -+ }; -+ type = g_enum_register_static ("GstV4l2SinkFlip", vals); -+ } -+ return type; -+} -+ - static void - gst_v4l2sink_interface_init (GstImplementsInterfaceClass * klass) - { -@@ -225,7 +254,7 @@ static GstFlowReturn gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); - static GstFlowReturn gst_v4l2sink_show_frame (GstBaseSink * bsink, - GstBuffer * buf); --static void gst_v4l2sink_set_rotation (GstV4l2Sink * v4l2sink); -+static void gst_v4l2sink_sync_rotation (GstV4l2Sink * v4l2sink); - - static void - gst_v4l2sink_base_init (gpointer g_class) -@@ -317,6 +346,11 @@ gst_v4l2sink_class_init (GstV4l2SinkClass * klass) - "Rotation angle for the image", MIN_ROTATION_ANGLE, - MAX_ROTATION_ANGLE, DEFAULT_ROTATION_ANGLE, G_PARAM_READWRITE)); - -+ g_object_class_install_property (gobject_class, PROP_FLIP, -+ g_param_spec_enum ("flip", "Flip State", -+ "Flip horizontal/vertical", -+ GST_TYPE_V4L2_FLIP, FLIP_NONE, G_PARAM_READWRITE)); -+ - basesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_get_caps); - basesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_set_caps); - basesink_class->buffer_alloc = GST_DEBUG_FUNCPTR (gst_v4l2sink_buffer_alloc); -@@ -348,8 +382,46 @@ gst_v4l2sink_init (GstV4l2Sink * v4l2sink, GstV4l2SinkClass * klass) - v4l2sink->crop_fields_set = 0; - v4l2sink->state = 0; - v4l2sink->rotation = 0; -+ v4l2sink->flip = FLIP_NONE; - } - -+static void -+gst_v4l2sink_sync_flip (GstV4l2Sink * v4l2sink) -+{ -+ if (GST_V4L2_IS_OPEN (v4l2sink->v4l2object)) { -+ struct v4l2_control control; -+ gint fd = v4l2sink->v4l2object->video_fd; -+ -+ memset (&control, 0x00, sizeof (struct v4l2_control)); -+ -+ switch (v4l2sink->flip) { -+ case FLIP_VERTICAL: -+ v4l2sink->rotation = 0; -+ control.value = 1; -+ break; -+ case FLIP_HORIZONTAL: -+ /* Horizontal Flip = Vertical Flip + 180 rotation */ -+ v4l2sink->rotation = 180; -+ control.value = 1; -+ break; -+ case FLIP_NONE: -+ /* In the below switch case logic we need to handle FLIP_NONE -+ * case since the v4l2 driver holds on to the last configured -+ * flip value even after the device file is closed. -+ */ -+ control.value = 0; -+ break; -+ default: -+ GST_WARNING_OBJECT (v4l2sink, "Invalid flip property"); -+ control.value = 0; -+ break; -+ } -+ -+ gst_v4l2sink_sync_rotation (v4l2sink); -+ control.id = V4L2_CID_VFLIP; -+ g_return_if_fail (v4l2_ioctl (fd, VIDIOC_S_CTRL, &control) >= 0); -+ } -+} - - static void - gst_v4l2sink_dispose (GObject * object) -@@ -488,7 +560,7 @@ gst_v4l2sink_sync_crop_fields (GstV4l2Sink * v4l2sink) - } - - static void --gst_v4l2sink_set_rotation (GstV4l2Sink * v4l2sink) -+gst_v4l2sink_sync_rotation (GstV4l2Sink * v4l2sink) - { - if (GST_V4L2_IS_OPEN (v4l2sink->v4l2object)) { - struct v4l2_control control; -@@ -559,7 +631,11 @@ gst_v4l2sink_set_property (GObject * object, - break; - case PROP_ROTATION: - v4l2sink->rotation = g_value_get_int (value); -- gst_v4l2sink_set_rotation (v4l2sink); -+ gst_v4l2sink_sync_rotation (v4l2sink); -+ break; -+ case PROP_FLIP: -+ v4l2sink->flip = g_value_get_enum (value); -+ gst_v4l2sink_sync_flip (v4l2sink); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -@@ -611,6 +687,9 @@ gst_v4l2sink_get_property (GObject * object, - case PROP_ROTATION: - g_value_set_int (value, v4l2sink->rotation); - break; -+ case PROP_FLIP: -+ g_value_set_enum (value, v4l2sink->flip); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -633,7 +712,8 @@ gst_v4l2sink_change_state (GstElement * element, GstStateChange transition) - /* open the device */ - if (!gst_v4l2_object_start (v4l2sink->v4l2object)) - return GST_STATE_CHANGE_FAILURE; -- gst_v4l2sink_set_rotation (v4l2sink); -+ gst_v4l2sink_sync_rotation (v4l2sink); -+ gst_v4l2sink_sync_flip (v4l2sink); - break; - default: - break; -diff --git a/sys/v4l2/gstv4l2sink.h b/sys/v4l2/gstv4l2sink.h -index 1239621..907973a 100644 ---- a/sys/v4l2/gstv4l2sink.h -+++ b/sys/v4l2/gstv4l2sink.h -@@ -76,6 +76,7 @@ struct _GstV4l2Sink { - - guint8 state; - gint rotation; -+ gint flip; - }; - - struct _GstV4l2SinkClass { --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch deleted file mode 100644 index 38601f8..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 39de525898eea073c1f2486b99b56ef25b6df289 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Sun, 4 Apr 2010 06:46:21 -0500 -Subject: [PATCH 04/11] v4l2sink: Add support for omap24xxvout driver - ---- - sys/v4l2/gstv4l2sink.c | 22 +++++++++++++++++++++- - 1 files changed, 21 insertions(+), 1 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 6163747..4408428 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -888,6 +888,18 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - /* initialize the buffer pool if not initialized yet (first buffer): */ - if (G_UNLIKELY (!v4l2sink->pool)) { - -+ gboolean no_pending_streamon = FALSE; -+ char *driver = (char *) v4l2sink->v4l2object->vcap.driver; -+ -+ /* the omap24xxvout driver wants us to start streaming before we -+ * queue the first buffer: -+ */ -+ if (!strcmp ("omap24xxvout", driver)) { -+ GST_DEBUG_OBJECT (v4l2sink, -+ "enabling no_pending_streamon hack for omap24xxvout driver"); -+ no_pending_streamon = TRUE; -+ } -+ - /* set_caps() might not be called yet.. so just to make sure: */ - if (!gst_v4l2sink_set_caps (bsink, caps)) { - return GST_FLOW_ERROR; -@@ -909,7 +921,14 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - gst_v4l2_xoverlay_prepare_xwindow_id (v4l2sink->v4l2object, TRUE); - #endif - -- v4l2sink->state = STATE_PENDING_STREAMON; -+ if (no_pending_streamon) { -+ if (!gst_v4l2_object_start_streaming (v4l2sink->v4l2object)) { -+ return GST_FLOW_ERROR; -+ } -+ v4l2sink->state = STATE_STREAMING; -+ } else { -+ v4l2sink->state = STATE_PENDING_STREAMON; -+ } - - GST_INFO_OBJECT (v4l2sink, "outputting buffers via mmap()"); - -@@ -996,6 +1015,7 @@ gst_v4l2sink_show_frame (GstBaseSink * bsink, GstBuffer * buf) - if (!gst_v4l2_buffer_pool_qbuf (v4l2sink->pool, GST_V4L2_BUFFER (buf))) { - return GST_FLOW_ERROR; - } -+ - if (v4l2sink->state == STATE_PENDING_STREAMON) { - if (!gst_v4l2_object_start_streaming (v4l2sink->v4l2object)) { - return GST_FLOW_ERROR; --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch deleted file mode 100644 index 04b67bc..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 1fabe36f40e872942c80041225bdbf41db561bea Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Sun, 4 Apr 2010 06:47:55 -0500 -Subject: [PATCH 05/11] v4l2sink: Add support for omap_vout driver - ---- - sys/v4l2/gstv4l2sink.c | 11 +++++++++++ - 1 files changed, 11 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 4408428..66dda8e 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -900,6 +900,17 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - no_pending_streamon = TRUE; - } - -+ /* workaround for bug in omap_vout driver, when we ask for more -+ * than four buffers: -+ */ -+ if (!strcmp ("omap_vout", driver)) { -+ if (v4l2sink->num_buffers > 4) { -+ v4l2sink->num_buffers = 4; -+ GST_DEBUG_OBJECT (v4l2sink, -+ "limiting to 4 buffers to work-around omap_vout driver bug"); -+ } -+ } -+ - /* set_caps() might not be called yet.. so just to make sure: */ - if (!gst_v4l2sink_set_caps (bsink, caps)) { - return GST_FLOW_ERROR; --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch deleted file mode 100644 index 8f5a21c..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 14d6f0fac0875981c418ac6577d23eafb5ff3f01 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Wed, 14 Apr 2010 03:29:20 -0500 -Subject: [PATCH 06/11] v4l2: increase v4l2sink element rank - -Increase rank so that it is autoplugged. ---- - sys/v4l2/gstv4l2.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/sys/v4l2/gstv4l2.c b/sys/v4l2/gstv4l2.c -index 4a7056f..cba4157 100644 ---- a/sys/v4l2/gstv4l2.c -+++ b/sys/v4l2/gstv4l2.c -@@ -55,7 +55,7 @@ plugin_init (GstPlugin * plugin) - if (!gst_element_register (plugin, "v4l2src", GST_RANK_PRIMARY, - GST_TYPE_V4L2SRC) || - #ifdef HAVE_EXPERIMENTAL -- !gst_element_register (plugin, "v4l2sink", GST_RANK_NONE, -+ !gst_element_register (plugin, "v4l2sink", GST_RANK_PRIMARY, - GST_TYPE_V4L2SINK) || - #endif - /* !gst_element_register (plugin, "v4l2jpegsrc", */ --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch deleted file mode 100644 index 345f9df..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 15c17ea368079fd5de19868af6d9ffad1cb09f3a Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Wed, 19 May 2010 17:33:46 -0500 -Subject: [PATCH 07/11] use GstQueryBuffers to get buffer requirements - ---- - sys/v4l2/gstv4l2sink.c | 40 ++++++++++++++++++++++++++++++++++++++++ - sys/v4l2/gstv4l2sink.h | 1 + - 2 files changed, 41 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 66dda8e..12323f7 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -373,6 +373,7 @@ gst_v4l2sink_init (GstV4l2Sink * v4l2sink, GstV4l2SinkClass * klass) - - /* number of buffers requested */ - v4l2sink->num_buffers = PROP_DEF_QUEUE_SIZE; -+ v4l2sink->num_buffers_can_change = TRUE; - v4l2sink->min_queued_bufs = PROP_DEF_MIN_QUEUED_BUFS; - - v4l2sink->probed_caps = NULL; -@@ -808,6 +809,7 @@ static gboolean - gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - { - GstV4l2Sink *v4l2sink = GST_V4L2SINK (bsink); -+ GstQuery *query; - gint w = 0, h = 0; - gboolean interlaced; - struct v4l2_fmtdesc *format; -@@ -855,6 +857,39 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - return FALSE; - } - -+ /* query to find if anyone upstream using these buffers has any -+ * minimum requirements: -+ */ -+ query = gst_query_new_buffers (caps); -+ if (gst_element_query (GST_ELEMENT (v4l2sink), query)) { -+ gint min_buffers, min_width, min_height; -+ -+ gst_query_parse_buffers_count (query, &min_buffers); -+ -+ /* XXX need to account for some buffers used by queue, etc.. probably -+ * queue should handle query, pass on to sink pad, and then add some -+ * number of buffers to the min, so this value is dynamic depending -+ * on the pipeline? -+ */ -+ if (min_buffers != -1) { -+ min_buffers += 3 + v4l2sink->min_queued_bufs; -+ } -+ -+ if (min_buffers > v4l2sink->num_buffers) { -+ v4l2sink->num_buffers_can_change = FALSE; -+ v4l2sink->num_buffers = min_buffers; -+ } -+ -+ gst_query_parse_buffers_dimensions (query, &min_width, &min_height); -+ if (min_width > w) { -+ w = min_width; -+ } -+ if (min_height > h) { -+ h = min_height; -+ } -+ } -+ gst_query_unref (query); -+ - if (!gst_v4l2_object_set_format (v4l2sink->v4l2object, format->pixelformat, - w, h, interlaced)) { - /* error already posted */ -@@ -944,6 +979,11 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - GST_INFO_OBJECT (v4l2sink, "outputting buffers via mmap()"); - - if (v4l2sink->num_buffers != v4l2sink->pool->buffer_count) { -+ if (!v4l2sink->num_buffers_can_change) { -+ GST_WARNING_OBJECT (v4l2sink, -+ "I can't handle a differing number of buffers!!!!"); -+ return GST_FLOW_ERROR; -+ } - v4l2sink->num_buffers = v4l2sink->pool->buffer_count; - g_object_notify (G_OBJECT (v4l2sink), "queue-size"); - } -diff --git a/sys/v4l2/gstv4l2sink.h b/sys/v4l2/gstv4l2sink.h -index 907973a..7649fa1 100644 ---- a/sys/v4l2/gstv4l2sink.h -+++ b/sys/v4l2/gstv4l2sink.h -@@ -58,6 +58,7 @@ struct _GstV4l2Sink { - GstCaps *current_caps; /* the current negotiated caps */ - GstV4l2BufferPool *pool; - guint32 num_buffers; -+ gboolean num_buffers_can_change; - guint32 min_queued_bufs; - - gint video_width, video_height; /* original (unscaled) video w/h */ --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0008-add-rowstride-support.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0008-add-rowstride-support.patch deleted file mode 100644 index f4ff893..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0008-add-rowstride-support.patch +++ /dev/null @@ -1,572 +0,0 @@ -From a86d0326df31103c2ee38ee1e0c62802a758ef13 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 21 May 2010 15:21:32 -0500 -Subject: [PATCH 08/11] add rowstride support - ---- - sys/v4l2/gstv4l2object.c | 141 +++++++++++++++++++++++++++++++++++++--------- - sys/v4l2/gstv4l2object.h | 6 +- - sys/v4l2/gstv4l2sink.c | 61 +++++++++++++------- - sys/v4l2/gstv4l2src.c | 28 +++++---- - 4 files changed, 174 insertions(+), 62 deletions(-) - -diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c -index f5672b5..5e34456 100644 ---- a/sys/v4l2/gstv4l2object.c -+++ b/sys/v4l2/gstv4l2object.c -@@ -1064,16 +1064,23 @@ gst_v4l2_object_get_format_list (GstV4l2Object * v4l2object) - return v4l2object->formats; - } - -- --GstStructure * --gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) -+/* -+ * gst_v4l2_object_v4l2fourcc_to_structures: -+ * @fourcc: requested format -+ * @structures: an array of at least MAX_STRUCTS_PER_FOURCC to return the -+ * results in -+ * -+ * Returns the number of structures returned via structures -+ */ -+gint -+gst_v4l2_object_v4l2fourcc_to_structures (guint32 fourcc, -+ GstStructure ** structures) - { -- GstStructure *structure = NULL; -- -+ gint count = 0; - switch (fourcc) { - case V4L2_PIX_FMT_MJPEG: /* Motion-JPEG */ - case V4L2_PIX_FMT_JPEG: /* JFIF JPEG */ -- structure = gst_structure_new ("image/jpeg", NULL); -+ structures[count++] = gst_structure_new ("image/jpeg", NULL); - break; - case V4L2_PIX_FMT_RGB332: - case V4L2_PIX_FMT_RGB555: -@@ -1151,17 +1158,25 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) - g_assert_not_reached (); - break; - } -- structure = gst_structure_new ("video/x-raw-rgb", -+ structures[count++] = gst_structure_new ("video/x-raw-rgb", - "bpp", G_TYPE_INT, bpp, - "depth", G_TYPE_INT, depth, - "red_mask", G_TYPE_INT, r_mask, - "green_mask", G_TYPE_INT, g_mask, - "blue_mask", G_TYPE_INT, b_mask, - "endianness", G_TYPE_INT, endianness, NULL); -+ structures[count++] = gst_structure_new ("video/x-raw-rgb-strided", -+ "bpp", G_TYPE_INT, bpp, -+ "depth", G_TYPE_INT, depth, -+ "red_mask", G_TYPE_INT, r_mask, -+ "green_mask", G_TYPE_INT, g_mask, -+ "blue_mask", G_TYPE_INT, b_mask, -+ "endianness", G_TYPE_INT, endianness, -+ "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); - break; - } - case V4L2_PIX_FMT_GREY: /* 8 Greyscale */ -- structure = gst_structure_new ("video/x-raw-gray", -+ structures[count++] = gst_structure_new ("video/x-raw-gray", - "bpp", G_TYPE_INT, 8, NULL); - break; - case V4L2_PIX_FMT_YYUV: /* 16 YUV 4:2:2 */ -@@ -1227,38 +1242,41 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) - g_assert_not_reached (); - break; - } -- structure = gst_structure_new ("video/x-raw-yuv", -+ structures[count++] = gst_structure_new ("video/x-raw-yuv", - "format", GST_TYPE_FOURCC, fcc, NULL); -+ structures[count++] = gst_structure_new ("video/x-raw-yuv-strided", -+ "format", GST_TYPE_FOURCC, fcc, -+ "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); - break; - } - case V4L2_PIX_FMT_DV: -- structure = -+ structures[count++] = - gst_structure_new ("video/x-dv", "systemstream", G_TYPE_BOOLEAN, TRUE, - NULL); - break; - case V4L2_PIX_FMT_MPEG: /* MPEG */ -- structure = gst_structure_new ("video/mpegts", NULL); -+ structures[count++] = gst_structure_new ("video/mpegts", NULL); - break; - case V4L2_PIX_FMT_WNVA: /* Winnov hw compres */ - break; - #ifdef V4L2_PIX_FMT_SBGGR8 - case V4L2_PIX_FMT_SBGGR8: -- structure = gst_structure_new ("video/x-raw-bayer", NULL); -+ structures[count++] = gst_structure_new ("video/x-raw-bayer", NULL); - break; - #endif - #ifdef V4L2_PIX_FMT_SN9C10X - case V4L2_PIX_FMT_SN9C10X: -- structure = gst_structure_new ("video/x-sonix", NULL); -+ structures[count++] = gst_structure_new ("video/x-sonix", NULL); - break; - #endif - #ifdef V4L2_PIX_FMT_PWC1 - case V4L2_PIX_FMT_PWC1: -- structure = gst_structure_new ("video/x-pwc1", NULL); -+ structures[count++] = gst_structure_new ("video/x-pwc1", NULL); - break; - #endif - #ifdef V4L2_PIX_FMT_PWC2 - case V4L2_PIX_FMT_PWC2: -- structure = gst_structure_new ("video/x-pwc2", NULL); -+ structures[count++] = gst_structure_new ("video/x-pwc2", NULL); - break; - #endif - default: -@@ -1267,7 +1285,7 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) - break; - } - -- return structure; -+ return count; - } - - -@@ -1278,22 +1296,23 @@ gst_v4l2_object_get_all_caps (void) - static GstCaps *caps = NULL; - - if (caps == NULL) { -- GstStructure *structure; -- - guint i; - - caps = gst_caps_new_empty (); - for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) { -- structure = -- gst_v4l2_object_v4l2fourcc_to_structure (gst_v4l2_formats[i].format); -- if (structure) { -+ GstStructure *structures[MAX_STRUCTS_PER_FOURCC]; -+ gint count, j; -+ count = -+ gst_v4l2_object_v4l2fourcc_to_structures (gst_v4l2_formats[i].format, -+ structures); -+ for (j = 0; j < count; j++) { - if (gst_v4l2_formats[i].dimensions) { -- gst_structure_set (structure, -+ gst_structure_set (structures[j], - "width", GST_TYPE_INT_RANGE, 1, GST_V4L2_MAX_SIZE, - "height", GST_TYPE_INT_RANGE, 1, GST_V4L2_MAX_SIZE, - "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 100, 1, NULL); - } -- gst_caps_append_structure (caps, structure); -+ gst_caps_append_structure (caps, structures[j]); - } - } - } -@@ -1306,12 +1325,14 @@ gst_v4l2_object_get_all_caps (void) - * @caps: given input caps - * @format: location for the v4l format - * @w/@h: location for width and height -+ * @rs: required rowstride in bytes, or 0 if natural stride (based on format -+ * and width) or not-applicable - * @fps_n/@fps_d: location for framerate - * @size: location for expected size of the frame or 0 if unknown - */ - gboolean - gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, -- struct v4l2_fmtdesc ** format, gint * w, gint * h, -+ struct v4l2_fmtdesc ** format, gint * w, gint * h, gint * rs, - gboolean * interlaced, guint * fps_n, guint * fps_d, guint * size) - { - GstStructure *structure; -@@ -1319,10 +1340,12 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - guint32 fourcc; - const gchar *mimetype; - guint outsize; -+ struct v4l2_format fmt = { 0, }; - - /* default unknown values */ - fourcc = 0; - outsize = 0; -+ *rs = 0; - - structure = gst_caps_get_structure (caps, 0); - -@@ -1351,61 +1374,73 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - *fps_n = gst_value_get_fraction_numerator (framerate); - *fps_d = gst_value_get_fraction_denominator (framerate); - -- if (!strcmp (mimetype, "video/x-raw-yuv")) { -+ if (!strcmp (mimetype, "video/x-raw-yuv") || -+ !strcmp (mimetype, "video/x-raw-yuv-strided")) { - gst_structure_get_fourcc (structure, "format", &fourcc); - - switch (fourcc) { - case GST_MAKE_FOURCC ('I', '4', '2', '0'): - case GST_MAKE_FOURCC ('I', 'Y', 'U', 'V'): - fourcc = V4L2_PIX_FMT_YUV420; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * GST_ROUND_UP_2 (*h); - outsize += 2 * ((GST_ROUND_UP_8 (*w) / 2) * (GST_ROUND_UP_2 (*h) / 2)); - break; - case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'): - fourcc = V4L2_PIX_FMT_YUYV; -+ *rs = GST_ROUND_UP_2 (*w) * 2; - outsize = (GST_ROUND_UP_2 (*w) * 2) * *h; - break; - case GST_MAKE_FOURCC ('Y', '4', '1', 'P'): - fourcc = V4L2_PIX_FMT_Y41P; -+ *rs = GST_ROUND_UP_2 (*w) * 2; - outsize = (GST_ROUND_UP_2 (*w) * 2) * *h; - break; - case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'): - fourcc = V4L2_PIX_FMT_UYVY; -+ *rs = GST_ROUND_UP_2 (*w) * 2; - outsize = (GST_ROUND_UP_2 (*w) * 2) * *h; - break; - case GST_MAKE_FOURCC ('Y', 'V', '1', '2'): - fourcc = V4L2_PIX_FMT_YVU420; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * GST_ROUND_UP_2 (*h); - outsize += 2 * ((GST_ROUND_UP_8 (*w) / 2) * (GST_ROUND_UP_2 (*h) / 2)); - break; - case GST_MAKE_FOURCC ('Y', '4', '1', 'B'): - fourcc = V4L2_PIX_FMT_YUV411P; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * *h; - outsize += 2 * ((GST_ROUND_UP_8 (*w) / 4) * *h); - break; - case GST_MAKE_FOURCC ('Y', '4', '2', 'B'): - fourcc = V4L2_PIX_FMT_YUV422P; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * *h; - outsize += 2 * ((GST_ROUND_UP_8 (*w) / 2) * *h); - break; - case GST_MAKE_FOURCC ('N', 'V', '1', '2'): - fourcc = V4L2_PIX_FMT_NV12; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * GST_ROUND_UP_2 (*h); - outsize += (GST_ROUND_UP_4 (*w) * *h) / 2; - break; - case GST_MAKE_FOURCC ('N', 'V', '2', '1'): - fourcc = V4L2_PIX_FMT_NV21; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * GST_ROUND_UP_2 (*h); - outsize += (GST_ROUND_UP_4 (*w) * *h) / 2; - break; - #ifdef V4L2_PIX_FMT_YVYU - case GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'): - fourcc = V4L2_PIX_FMT_YVYU; -+ *rs = GST_ROUND_UP_2 (*w) * 2; - outsize = (GST_ROUND_UP_2 (*w) * 2) * *h; - break; - #endif - } -- } else if (!strcmp (mimetype, "video/x-raw-rgb")) { -+ } else if (!strcmp (mimetype, "video/x-raw-rgb") || -+ !strcmp (mimetype, "video/x-raw-rgb-strided")) { - gint bpp, endianness, r_mask; - - gst_structure_get_int (structure, "bpp", &bpp); -@@ -1415,20 +1450,25 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - switch (bpp) { - case 8: - fourcc = V4L2_PIX_FMT_RGB332; -+ *rs = *w; - break; - case 15: - fourcc = (endianness == G_LITTLE_ENDIAN) ? - V4L2_PIX_FMT_RGB555 : V4L2_PIX_FMT_RGB555X; -+ *rs = 2 * *w; - break; - case 16: - fourcc = (endianness == G_LITTLE_ENDIAN) ? - V4L2_PIX_FMT_RGB565 : V4L2_PIX_FMT_RGB565X; -+ *rs = 2 * *w; - break; - case 24: - fourcc = (r_mask == 0xFF) ? V4L2_PIX_FMT_BGR24 : V4L2_PIX_FMT_RGB24; -+ *rs = 3 * *w; - break; - case 32: - fourcc = (r_mask == 0xFF) ? V4L2_PIX_FMT_BGR32 : V4L2_PIX_FMT_RGB32; -+ *rs = 4 * *w; - break; - } - } else if (strcmp (mimetype, "video/x-dv") == 0) { -@@ -1458,6 +1498,25 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - if (fourcc == 0) - return FALSE; - -+ /* check what stride the driver supports */ -+ fmt.type = v4l2object->type; -+ fmt.fmt.pix.width = *w; -+ fmt.fmt.pix.height = *h; -+ fmt.fmt.pix.pixelformat = fourcc; -+ fmt.fmt.pix.field = V4L2_FIELD_ANY; -+ fmt.fmt.pix.bytesperline = *rs; -+ if (v4l2_ioctl (v4l2object->video_fd, VIDIOC_TRY_FMT, &fmt) >= 0) { -+ if (fmt.fmt.pix.bytesperline == *rs) { -+ *rs = 0; -+ } else { -+ *rs = fmt.fmt.pix.bytesperline; -+ } -+ GST_INFO_OBJECT (v4l2object->element, "rowstride: %d", *rs); -+ } else { -+ GST_WARNING_OBJECT (v4l2object->element, -+ "VIDIOC_TRY_FMT should not fail.. driver problem?"); -+ } -+ - done: - *format = gst_v4l2_object_get_format_from_fourcc (v4l2object, fourcc); - *size = outsize; -@@ -1465,6 +1524,36 @@ done: - return TRUE; - } - -+/* Update caps to reflect rowstride that has been requested by the -+ * driver -+ */ -+GstCaps * -+gst_v4l2_object_update_rowstride (GstV4l2Object * v4l2object, -+ GstCaps * caps, gint rs) -+{ -+ GstStructure *structure; -+ const gchar *mimetype; -+ -+ caps = gst_caps_make_writable (caps); -+ -+ structure = gst_caps_get_structure (caps, 0); -+ mimetype = gst_structure_get_name (structure); -+ -+ if (!strcmp (mimetype, "video/x-raw-yuv")) { -+ mimetype = "video/x-raw-yuv-strided"; -+ gst_structure_set_name (structure, mimetype); -+ } else if (!strcmp (mimetype, "video/x-raw-rgb")) { -+ mimetype = "video/x-raw-rgb-strided"; -+ gst_structure_set_name (structure, mimetype); -+ } -+ -+ if (!strcmp (mimetype, "video/x-raw-yuv-strided") || -+ !strcmp (mimetype, "video/x-raw-rgb-strided")) { -+ gst_structure_set (structure, "rowstride", G_TYPE_INT, rs, NULL); -+ } -+ -+ return caps; -+} - - static gboolean - gst_v4l2_object_get_nearest_size (GstV4l2Object * v4l2object, -diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h -index a0dd41c..228e7c7 100644 ---- a/sys/v4l2/gstv4l2object.h -+++ b/sys/v4l2/gstv4l2object.h -@@ -179,15 +179,17 @@ GstCaps* gst_v4l2_object_probe_caps_for_format (GstV4l2Object *v4l2object, - const GstStructure * template); - - gboolean gst_v4l2_object_get_caps_info (GstV4l2Object *v4l2object, GstCaps *caps, -- struct v4l2_fmtdesc **format, gint *w, gint *h, -+ struct v4l2_fmtdesc **format, gint *w, gint *h, gint *rs, - gboolean * interlaced, guint *fps_n, guint *fps_d, guint *size); - -+GstCaps * gst_v4l2_object_update_rowstride (GstV4l2Object * v4l2object, GstCaps * caps, gint rs); - - GSList* gst_v4l2_object_get_format_list (GstV4l2Object *v4l2object); - - GstCaps* gst_v4l2_object_get_all_caps (void); - --GstStructure* gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc); -+#define MAX_STRUCTS_PER_FOURCC 2 -+gint gst_v4l2_object_v4l2fourcc_to_structures (guint32 fourcc, GstStructure ** structures); - - gboolean gst_v4l2_object_set_format (GstV4l2Object *v4l2object, guint32 pixelformat, guint32 width, guint32 height, gboolean interlaced); - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 12323f7..a1f78cf 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -776,24 +776,23 @@ gst_v4l2sink_get_caps (GstBaseSink * bsink) - for (walk = v4l2sink->v4l2object->formats; walk; walk = walk->next) { - struct v4l2_fmtdesc *format; - -- GstStructure *template; -+ GstStructure *templates[MAX_STRUCTS_PER_FOURCC]; -+ gint count, i; - - format = (struct v4l2_fmtdesc *) walk->data; - -- template = gst_v4l2_object_v4l2fourcc_to_structure (format->pixelformat); -+ count = gst_v4l2_object_v4l2fourcc_to_structures (format->pixelformat, -+ templates); - -- if (template) { -+ for (i = 0; i < count; i++) { - GstCaps *tmp; - -- tmp = -- gst_v4l2_object_probe_caps_for_format (v4l2sink->v4l2object, -- format->pixelformat, template); -+ tmp = gst_v4l2_object_probe_caps_for_format (v4l2sink->v4l2object, -+ format->pixelformat, templates[i]); - if (tmp) - gst_caps_append (ret, tmp); - -- gst_structure_free (template); -- } else { -- GST_DEBUG_OBJECT (v4l2sink, "unknown format %u", format->pixelformat); -+ gst_structure_free (templates[i]); - } - } - -@@ -810,7 +809,7 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - { - GstV4l2Sink *v4l2sink = GST_V4L2SINK (bsink); - GstQuery *query; -- gint w = 0, h = 0; -+ gint w = 0, h = 0, rs = 0; - gboolean interlaced; - struct v4l2_fmtdesc *format; - guint fps_n, fps_d; -@@ -823,11 +822,36 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - return FALSE; - } - -+ /* we want our own v4l2 type of fourcc codes */ -+ if (!gst_v4l2_object_get_caps_info (v4l2sink->v4l2object, caps, -+ &format, &w, &h, &rs, &interlaced, &fps_n, &fps_d, &size)) { -+ GST_DEBUG_OBJECT (v4l2sink, "can't get capture format from caps %p", caps); -+ return FALSE; -+ } -+ -+ if (!format) { -+ GST_DEBUG_OBJECT (v4l2sink, "unrecognized caps!!"); -+ return FALSE; -+ } -+ -+ /* we need to make our own ref before we potentially update the -+ * caps, to avoid that we release a ref that is not owned by us -+ * when we make the caps writable -+ */ -+ caps = gst_caps_ref (caps); -+ -+ /* if necessary, update caps for rowstride */ -+ if (rs) { -+ caps = gst_v4l2_object_update_rowstride (v4l2sink->v4l2object, caps, rs); -+ GST_DEBUG_OBJECT (v4l2sink, "updated caps: %" GST_PTR_FORMAT, caps); -+ } -+ - if (v4l2sink->current_caps) { - GST_DEBUG_OBJECT (v4l2sink, "already have caps set.. are they equal?"); - LOG_CAPS (v4l2sink, v4l2sink->current_caps); - if (gst_caps_is_equal (v4l2sink->current_caps, caps)) { - GST_DEBUG_OBJECT (v4l2sink, "yes they are!"); -+ gst_caps_unref (caps); - return TRUE; - } - GST_DEBUG_OBJECT (v4l2sink, "no they aren't!"); -@@ -842,18 +866,7 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - * - */ - GST_DEBUG_OBJECT (v4l2sink, "warning, changing caps not supported yet"); -- return FALSE; -- } -- -- /* we want our own v4l2 type of fourcc codes */ -- if (!gst_v4l2_object_get_caps_info (v4l2sink->v4l2object, caps, -- &format, &w, &h, &interlaced, &fps_n, &fps_d, &size)) { -- GST_DEBUG_OBJECT (v4l2sink, "can't get capture format from caps %p", caps); -- return FALSE; -- } -- -- if (!format) { -- GST_DEBUG_OBJECT (v4l2sink, "unrecognized caps!!"); -+ gst_caps_unref (caps); - return FALSE; - } - -@@ -893,6 +906,7 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - if (!gst_v4l2_object_set_format (v4l2sink->v4l2object, format->pixelformat, - w, h, interlaced)) { - /* error already posted */ -+ gst_caps_unref (caps); - return FALSE; - } - -@@ -951,6 +965,9 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - return GST_FLOW_ERROR; - } - -+ /* caps may have changed in _set_caps() if we need rowstride */ -+ caps = v4l2sink->current_caps; -+ - GST_V4L2_CHECK_OPEN (v4l2sink->v4l2object); - - if (!(v4l2sink->pool = gst_v4l2_buffer_pool_new (GST_ELEMENT (v4l2sink), -diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c -index 4a37d35..a9a7787 100644 ---- a/sys/v4l2/gstv4l2src.c -+++ b/sys/v4l2/gstv4l2src.c -@@ -581,24 +581,23 @@ gst_v4l2src_get_caps (GstBaseSrc * src) - for (walk = v4l2src->v4l2object->formats; walk; walk = walk->next) { - struct v4l2_fmtdesc *format; - -- GstStructure *template; -+ GstStructure *templates[MAX_STRUCTS_PER_FOURCC]; -+ gint count, i; - - format = (struct v4l2_fmtdesc *) walk->data; - -- template = gst_v4l2_object_v4l2fourcc_to_structure (format->pixelformat); -+ count = gst_v4l2_object_v4l2fourcc_to_structures (format->pixelformat, -+ templates); - -- if (template) { -+ for (i = 0; i < count; i++) { - GstCaps *tmp; - -- tmp = -- gst_v4l2_object_probe_caps_for_format (v4l2src->v4l2object, -- format->pixelformat, template); -+ tmp = gst_v4l2_object_probe_caps_for_format (v4l2src->v4l2object, -+ format->pixelformat, templates[i]); - if (tmp) - gst_caps_append (ret, tmp); - -- gst_structure_free (template); -- } else { -- GST_DEBUG_OBJECT (v4l2src, "unknown format %u", format->pixelformat); -+ gst_structure_free (templates[i]); - } - } - -@@ -613,7 +612,7 @@ static gboolean - gst_v4l2src_set_caps (GstBaseSrc * src, GstCaps * caps) - { - GstV4l2Src *v4l2src; -- gint w = 0, h = 0; -+ gint w = 0, h = 0, rs = 0; - gboolean interlaced; - struct v4l2_fmtdesc *format; - guint fps_n, fps_d; -@@ -635,13 +634,18 @@ gst_v4l2src_set_caps (GstBaseSrc * src, GstCaps * caps) - } - - /* we want our own v4l2 type of fourcc codes */ -- if (!gst_v4l2_object_get_caps_info (v4l2src->v4l2object, caps, &format, &w, -- &h, &interlaced, &fps_n, &fps_d, &size)) { -+ if (!gst_v4l2_object_get_caps_info (v4l2src->v4l2object, caps, &format, -+ &w, &h, &rs, &interlaced, &fps_n, &fps_d, &size)) { - GST_INFO_OBJECT (v4l2src, - "can't get capture format from caps %" GST_PTR_FORMAT, caps); - return FALSE; - } - -+ /* if necessary, update caps for rowstride */ -+ if (rs) { -+ caps = gst_v4l2_object_update_rowstride (v4l2src->v4l2object, caps, rs); -+ } -+ - GST_DEBUG_OBJECT (v4l2src, "trying to set_capture %dx%d at %d/%d fps, " - "format %s", w, h, fps_n, fps_d, format->description); - --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch deleted file mode 100644 index c5d3197..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch +++ /dev/null @@ -1,119 +0,0 @@ -From e7497b9f0c6c88b764d8f95e01197e2a2ea0dd95 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Tue, 25 May 2010 11:02:45 -0500 -Subject: [PATCH 09/11] use GstEventCrop to get crop info - ---- - sys/v4l2/gstv4l2sink.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++- - 1 files changed, 62 insertions(+), 1 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index a1f78cf..feafe7a 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -252,6 +252,7 @@ static GstCaps *gst_v4l2sink_get_caps (GstBaseSink * bsink); - static gboolean gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps); - static GstFlowReturn gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); -+static gboolean gst_v4l2sink_event (GstBaseSink * bsink, GstEvent * event); - static GstFlowReturn gst_v4l2sink_show_frame (GstBaseSink * bsink, - GstBuffer * buf); - static void gst_v4l2sink_sync_rotation (GstV4l2Sink * v4l2sink); -@@ -354,6 +355,7 @@ gst_v4l2sink_class_init (GstV4l2SinkClass * klass) - basesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_get_caps); - basesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_set_caps); - basesink_class->buffer_alloc = GST_DEBUG_FUNCPTR (gst_v4l2sink_buffer_alloc); -+ basesink_class->event = GST_DEBUG_FUNCPTR (gst_v4l2sink_event); - basesink_class->render = GST_DEBUG_FUNCPTR (gst_v4l2sink_show_frame); - } - -@@ -895,11 +897,22 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - - gst_query_parse_buffers_dimensions (query, &min_width, &min_height); - if (min_width > w) { -+ v4l2sink->crop.width = w; -+ v4l2sink->crop_fields_set |= RECT_WIDTH_SET; - w = min_width; - } - if (min_height > h) { -+ v4l2sink->crop.height = h; -+ v4l2sink->crop_fields_set |= RECT_HEIGHT_SET; - h = min_height; - } -+ -+ /* clear top/left crop values.. otherwise by default display will try -+ * to center, rather than scale, the image if it is too big to fit on -+ * display -+ */ -+ v4l2sink->crop.top = v4l2sink->crop.left = 0; -+ v4l2sink->crop_fields_set |= RECT_TOP_SET | RECT_LEFT_SET; - } - gst_query_unref (query); - -@@ -919,7 +932,13 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - GST_VIDEO_SINK_WIDTH (v4l2sink) = w; - GST_VIDEO_SINK_HEIGHT (v4l2sink) = h; - -- v4l2sink->current_caps = gst_caps_ref (caps); -+ /* this needs to go after gst_v4l2_object_set_format() to ensure driver -+ * has proper width/height (so we don't confuse it's error checking by -+ * setting a crop larger than the picture size) -+ */ -+ gst_v4l2sink_sync_crop_fields (v4l2sink); -+ -+ v4l2sink->current_caps = caps; - - return TRUE; - } -@@ -1023,6 +1042,48 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - } - } - -+/* called to handle events */ -+static gboolean -+gst_v4l2sink_event (GstBaseSink * bsink, GstEvent * event) -+{ -+ GstV4l2Sink *v4l2sink = GST_V4L2SINK (bsink); -+ GstEventType type = GST_EVENT_TYPE (event); -+ -+ GST_DEBUG_OBJECT (v4l2sink, "event %" GST_PTR_FORMAT, event); -+ -+ switch (type) { -+ case GST_EVENT_CROP:{ -+ gint top, left, width, height; -+ gst_event_parse_crop (event, &top, &left, &width, &height); -+ if (top >= 0) { -+ v4l2sink->crop.top = top; -+ v4l2sink->crop_fields_set |= RECT_TOP_SET; -+ } -+ if (left >= 0) { -+ v4l2sink->crop.left = left; -+ v4l2sink->crop_fields_set |= RECT_LEFT_SET; -+ } -+ if (width >= 0) { -+ v4l2sink->crop.width = width; -+ v4l2sink->crop_fields_set |= RECT_WIDTH_SET; -+ } -+ if (height >= 0) { -+ v4l2sink->crop.height = height; -+ v4l2sink->crop_fields_set |= RECT_HEIGHT_SET; -+ } -+ gst_v4l2sink_sync_crop_fields (v4l2sink); -+ return TRUE; -+ } -+ default:{ -+ if (GST_BASE_SINK_CLASS (parent_class)->event) { -+ return GST_BASE_SINK_CLASS (parent_class)->event (bsink, event); -+ } else { -+ return TRUE; -+ } -+ } -+ } -+} -+ - /* called after A/V sync to render frame */ - static GstFlowReturn - gst_v4l2sink_show_frame (GstBaseSink * bsink, GstBuffer * buf) --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0010-v4l2-prefer-NV12.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0010-v4l2-prefer-NV12.patch deleted file mode 100644 index 301056a..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0010-v4l2-prefer-NV12.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 107c18830342c69229857f968dff33071d07992d Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Tue, 14 Sep 2010 07:44:01 -0500 -Subject: [PATCH 10/11] v4l2: prefer NV12 - -All else being equal, the buffer sizes are smaller compared to a 422 format -like YUY2/UYVY.. although ideally rank would come from driver. ---- - sys/v4l2/gstv4l2object.c | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c -index 5e34456..644edcf 100644 ---- a/sys/v4l2/gstv4l2object.c -+++ b/sys/v4l2/gstv4l2object.c -@@ -886,6 +886,9 @@ gst_v4l2_object_format_get_rank (const struct v4l2_fmtdesc *fmt) - break; - - case V4L2_PIX_FMT_NV12: /* 12 Y/CbCr 4:2:0 */ -+ rank = YUV_BASE_RANK + 11; -+ break; -+ - case V4L2_PIX_FMT_NV21: /* 12 Y/CrCb 4:2:0 */ - case V4L2_PIX_FMT_YYUV: /* 16 YUV 4:2:2 */ - case V4L2_PIX_FMT_HI240: /* 8 8-bit color */ --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch deleted file mode 100644 index 3384de7..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 4e319948c62aafd5339c38d065fd8dbfa5a09ced Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Thu, 13 Jan 2011 09:43:08 -0600 -Subject: [PATCH 11/11] v4l2sink: fix issue seen with autoconvert - -In this scenario _set_caps() will get called earlier than _buffer_alloc() -so we need to not override the number of buffers in the case that the -upstream element answers the query about number of requested buffers. ---- - sys/v4l2/gstv4l2sink.c | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index feafe7a..ca6ae15 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -881,6 +881,8 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - - gst_query_parse_buffers_count (query, &min_buffers); - -+ GST_DEBUG_OBJECT (v4l2sink, "min_buffers=%d", min_buffers); -+ - /* XXX need to account for some buffers used by queue, etc.. probably - * queue should handle query, pass on to sink pad, and then add some - * number of buffers to the min, so this value is dynamic depending -@@ -888,10 +890,10 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - */ - if (min_buffers != -1) { - min_buffers += 3 + v4l2sink->min_queued_bufs; -+ v4l2sink->num_buffers_can_change = FALSE; - } - - if (min_buffers > v4l2sink->num_buffers) { -- v4l2sink->num_buffers_can_change = FALSE; - v4l2sink->num_buffers = min_buffers; - } - -@@ -972,7 +974,7 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - * than four buffers: - */ - if (!strcmp ("omap_vout", driver)) { -- if (v4l2sink->num_buffers > 4) { -+ if (v4l2sink->num_buffers_can_change && v4l2sink->num_buffers > 4) { - v4l2sink->num_buffers = 4; - GST_DEBUG_OBJECT (v4l2sink, - "limiting to 4 buffers to work-around omap_vout driver bug"); --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/files/gst-0.10.27-0099-v4l2sink-Disable-rotation-code-when-not-found.patch b/media-libs/gst-plugins-good/files/gst-0.10.27-0099-v4l2sink-Disable-rotation-code-when-not-found.patch deleted file mode 100644 index 4a2b992..0000000 --- a/media-libs/gst-plugins-good/files/gst-0.10.27-0099-v4l2sink-Disable-rotation-code-when-not-found.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 606df19aa1230d0c6081e85d914c866eb7674a5a Mon Sep 17 00:00:00 2001 -From: Daniel Diaz <ddiaz@ti.com> -Date: Fri, 28 Jan 2011 15:23:26 -0600 -Subject: [PATCH] v4l2sink: Disable rotation code when not found. - -Kernel headers might not include support for V4L2 rotation. - -Signed-off-by: Daniel Diaz <ddiaz@ti.com> ---- - sys/v4l2/gstv4l2sink.c | 14 ++++++++++++++ - 1 files changed, 14 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index ca6ae15..374de88 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -255,7 +255,9 @@ static GstFlowReturn gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, - static gboolean gst_v4l2sink_event (GstBaseSink * bsink, GstEvent * event); - static GstFlowReturn gst_v4l2sink_show_frame (GstBaseSink * bsink, - GstBuffer * buf); -+#ifdef V4L2_CID_ROTATE - static void gst_v4l2sink_sync_rotation (GstV4l2Sink * v4l2sink); -+#endif - - static void - gst_v4l2sink_base_init (gpointer g_class) -@@ -342,10 +344,12 @@ gst_v4l2sink_class_init (GstV4l2SinkClass * klass) - "The height of the video crop; default is equal to negotiated image height", - 0, 0xffffffff, 0, G_PARAM_READWRITE)); - -+#ifdef V4L2_CID_ROTATE - g_object_class_install_property (gobject_class, PROP_ROTATION, - g_param_spec_int ("rotation", "Rotation angle", - "Rotation angle for the image", MIN_ROTATION_ANGLE, - MAX_ROTATION_ANGLE, DEFAULT_ROTATION_ANGLE, G_PARAM_READWRITE)); -+#endif - - g_object_class_install_property (gobject_class, PROP_FLIP, - g_param_spec_enum ("flip", "Flip State", -@@ -420,7 +424,9 @@ gst_v4l2sink_sync_flip (GstV4l2Sink * v4l2sink) - break; - } - -+#ifdef V4L2_CID_ROTATE - gst_v4l2sink_sync_rotation (v4l2sink); -+#endif - control.id = V4L2_CID_VFLIP; - g_return_if_fail (v4l2_ioctl (fd, VIDIOC_S_CTRL, &control) >= 0); - } -@@ -562,6 +568,7 @@ gst_v4l2sink_sync_crop_fields (GstV4l2Sink * v4l2sink) - } - } - -+#ifdef V4L2_CID_ROTATE - static void - gst_v4l2sink_sync_rotation (GstV4l2Sink * v4l2sink) - { -@@ -575,6 +582,7 @@ gst_v4l2sink_sync_rotation (GstV4l2Sink * v4l2sink) - g_return_if_fail (v4l2_ioctl (fd, VIDIOC_S_CTRL, &control) >= 0); - } - } -+#endif - - - static void -@@ -632,10 +640,12 @@ gst_v4l2sink_set_property (GObject * object, - v4l2sink->crop_fields_set |= RECT_HEIGHT_SET; - gst_v4l2sink_sync_crop_fields (v4l2sink); - break; -+#ifdef V4L2_CID_ROTATE - case PROP_ROTATION: - v4l2sink->rotation = g_value_get_int (value); - gst_v4l2sink_sync_rotation (v4l2sink); - break; -+#endif - case PROP_FLIP: - v4l2sink->flip = g_value_get_enum (value); - gst_v4l2sink_sync_flip (v4l2sink); -@@ -687,9 +697,11 @@ gst_v4l2sink_get_property (GObject * object, - case PROP_CROP_HEIGHT: - g_value_set_uint (value, v4l2sink->crop.height); - break; -+#ifdef V4L2_CID_ROTATE - case PROP_ROTATION: - g_value_set_int (value, v4l2sink->rotation); - break; -+#endif - case PROP_FLIP: - g_value_set_enum (value, v4l2sink->flip); - break; -@@ -715,7 +727,9 @@ gst_v4l2sink_change_state (GstElement * element, GstStateChange transition) - /* open the device */ - if (!gst_v4l2_object_start (v4l2sink->v4l2object)) - return GST_STATE_CHANGE_FAILURE; -+#ifdef V4L2_CID_ROTATE - gst_v4l2sink_sync_rotation (v4l2sink); -+#endif - gst_v4l2sink_sync_flip (v4l2sink); - break; - default: --- -1.7.1 - diff --git a/media-libs/gst-plugins-good/gst-plugins-good-0.10.27_p20110127.ebuild b/media-libs/gst-plugins-good/gst-plugins-good-0.10.27_p20110127.ebuild deleted file mode 100644 index 272f98a..0000000 --- a/media-libs/gst-plugins-good/gst-plugins-good-0.10.27_p20110127.ebuild +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -# order is important, gnome2 after gst-plugins -inherit gst-plugins-good gst-plugins10 gnome2 eutils flag-o-matic libtool - -DESCRIPTION="Set of Good plug-ins for GStreamer" -HOMEPAGE="http://gstreamer.net/" -MY_P=${P%%_*} -SRC_URI="http://gstreamer.freedesktop.org/src/${PN}/${MY_P}.tar.bz2" -S="${WORKDIR}/${MY_P}" - -LICENSE="LGPL-2.1" -KEYWORDS="~alpha ~amd64 arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd" -IUSE="" - -RDEPEND=">=media-libs/gst-plugins-base-0.10.32 - >=media-libs/gstreamer-0.10.32 - >=dev-libs/liboil-0.3.14 - sys-libs/zlib - app-arch/bzip2" -DEPEND="${RDEPEND} - >=sys-devel/gettext-0.11.5 - dev-util/pkgconfig - !<media-libs/gst-plugins-bad-0.10.19" - -# Always enable optional bz2 support for matroska -# Always enable optional zlib support for qtdemux, id3demux and matroska -# Many media files require these to work, as some container headers are often compressed, bug 291154 -GST_PLUGINS_BUILD="bz2 zlib" - -src_unpack() { - unpack ${A} - cd "${S}" - epatch "${FILESDIR}"/gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch - epatch "${FILESDIR}"/gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch - epatch "${FILESDIR}"/gst-0.10.27-0003-v4l2sink-Add-flip-property.patch - epatch "${FILESDIR}"/gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch - epatch "${FILESDIR}"/gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch - epatch "${FILESDIR}"/gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch - epatch "${FILESDIR}"/gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch - epatch "${FILESDIR}"/gst-0.10.27-0008-add-rowstride-support.patch - epatch "${FILESDIR}"/gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch - epatch "${FILESDIR}"/gst-0.10.27-0010-v4l2-prefer-NV12.patch - epatch "${FILESDIR}"/gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch - epatch "${FILESDIR}"/gst-0.10.27-0099-v4l2sink-Disable-rotation-code-when-not-found.patch -} - -src_compile() { - # gst doesnt handle optimisations well - strip-flags - replace-flags "-O3" "-O2" - filter-flags "-fprefetch-loop-arrays" # see bug 22249 - - gst-plugins-good_src_configure \ - --with-default-audiosink=autoaudiosink \ - --with-default-visualizer=goom - - emake || die "emake failed." -} - -# override eclass -src_install() { - gnome2_src_install -} - -DOCS="AUTHORS ChangeLog NEWS README RELEASE" - -pkg_postinst () { - gnome2_pkg_postinst - - echo - elog "The GStreamer plugins setup has changed quite a bit on Gentoo," - elog "applications now should provide the basic plugins needed." - echo - elog "The new seperate plugins are all named 'gst-plugins-<plugin>'." - elog "To get a listing of currently available plugins execute 'emerge -s gst-plugins-'." - elog "In most cases it shouldn't be needed though to emerge extra plugins." -} - -pkg_postrm() { - gnome2_pkg_postrm -} diff --git a/media-libs/gstreamer/Manifest b/media-libs/gstreamer/Manifest deleted file mode 100644 index 82ecc0c..0000000 --- a/media-libs/gstreamer/Manifest +++ /dev/null @@ -1,7 +0,0 @@ -AUX gst-0.10.32-0001-gst-launch-add-loop-argument.patch 2042 RMD160 13e1dbf1e7b19d2a065ad2e2e60aa35214461c02 SHA1 178ebe1b011a8bf216b9a1ea42e9f3492d6020fa SHA256 2904a8fa9c847d5608328b52ef9d76e90d9fb88161a3fd5ac07a67c7df1b6dbb -AUX gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch 10451 RMD160 97c13f0ebf4b62615e053f37484797a3cc53df66 SHA1 235c410bc00f247ad2f6f250d5f042dcae891c49 SHA256 a6dcd34798f6b327f2681cb37ac1ef105e260f365bf50791197b43a55fa00b00 -AUX gst-0.10.32-0003-add-GstQueryBuffers-query.patch 8548 RMD160 534925365ec7d7ddcffcf72d1f5de13697b1e608 SHA1 11a7aa6257d0d301636957e5e3f946db21201fa5 SHA256 1a8daee3c8f53a7aa566384d1e327120e05aed095c15e9b34a4f9f29a971779f -AUX gst-0.10.32-0004-Add-GstEventCrop-event.patch 6061 RMD160 99498d853d4bed0cd3dffe4baa25feed743fce7e SHA1 3096b37936659c522e3f8e16d310092d7cadf666 SHA256 f6b568bb9e903d3135f88a0442be89e5376f8475e633fe7d9cb7cda7482da5a3 -AUX gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch 2278 RMD160 726964b4a12f6b1fe928796e977f59019224e354 SHA1 d7d5239ecb93d353edbb67bd5aa050c91ff084b3 SHA256 e7fc825d541621980f46b3a58bc5d208c2e2facd60bdc70c0c45207c1e88cf7c -DIST gstreamer-0.10.32.tar.bz2 3529980 RMD160 447fa2b8b4c622a628763805cb65006d54919e54 SHA1 95477044ed23cf94669e56ea43607de05c2a0cb3 SHA256 3bf4e46a186ee9a1f5e212aaf651d67cffb4f5f05345a7c99ae71d5d992be133 -EBUILD gstreamer-0.10.32_p20110127.ebuild 2181 RMD160 66581f42aabf63a23753081fdf29f6111406673f SHA1 1c2f9201a7883c127d3c10e3ce0a5b05db23927b SHA256 1c64a6fd9859e1347caa039eab89034808981646477dc68eec08b1801206bb38 diff --git a/media-libs/gstreamer/files/gst-0.10.32-0001-gst-launch-add-loop-argument.patch b/media-libs/gstreamer/files/gst-0.10.32-0001-gst-launch-add-loop-argument.patch deleted file mode 100644 index bc592ed..0000000 --- a/media-libs/gstreamer/files/gst-0.10.32-0001-gst-launch-add-loop-argument.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 23dbd4ce2e492152a4d21b8043f353d224dfe355 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Sat, 13 Feb 2010 15:29:13 -0600 -Subject: [PATCH 1/5] gst-launch: add --loop argument - -if --loop is specified, automatically seek to beginning of clip when EOS is received ---- - tools/gst-launch.c | 16 +++++++++++++++- - 1 files changed, 15 insertions(+), 1 deletions(-) - -diff --git a/tools/gst-launch.c b/tools/gst-launch.c -index 10b7fae..d5b17f8 100644 ---- a/tools/gst-launch.c -+++ b/tools/gst-launch.c -@@ -716,6 +716,7 @@ main (int argc, char *argv[]) - gboolean no_sigusr_handler = FALSE; - gboolean trace = FALSE; - gboolean eos_on_shutdown = FALSE; -+ gboolean loop = FALSE; - gchar *savefile = NULL; - gchar *exclude_args = NULL; - #ifndef GST_DISABLE_OPTION_PARSING -@@ -742,6 +743,8 @@ main (int argc, char *argv[]) - N_("Print alloc trace (if enabled at compile time)"), NULL}, - {"eos-on-shutdown", 'e', 0, G_OPTION_ARG_NONE, &eos_on_shutdown, - N_("Force EOS on sources before shutting the pipeline down"), NULL}, -+ {"loop", 'l', 0, G_OPTION_ARG_NONE, &loop, -+ N_("Repeat clip in loop without rebuilding pipeline"), NULL}, - GST_TOOLS_GOPTION_VERSION, - {NULL} - }; -@@ -926,7 +929,18 @@ main (int argc, char *argv[]) - } - - tfthen = gst_util_get_timestamp (); -- caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING); -+ do { -+ caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING); -+ if (loop && (caught_error == ELR_NO_ERROR)) { -+ PRINT (_("Looping ...\n")); -+ gst_element_seek (pipeline, 1.0, -+ GST_FORMAT_TIME, -+ GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, -+ GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); -+ } else { -+ break; -+ } -+ } while (TRUE); - if (eos_on_shutdown && caught_error == ELR_INTERRUPT) { - PRINT (_("EOS on shutdown enabled -- Forcing EOS on the pipeline\n")); - waiting_eos = TRUE; --- -1.7.1 - diff --git a/media-libs/gstreamer/files/gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch b/media-libs/gstreamer/files/gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch deleted file mode 100644 index 724bd58..0000000 --- a/media-libs/gstreamer/files/gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch +++ /dev/null @@ -1,262 +0,0 @@ -From ac55210758bdd06fe0dec6ef67a60a96a86b39f4 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Sun, 4 Apr 2010 09:14:34 -0500 -Subject: [PATCH 2/5] Changes to make it possible to LD_PRELOAD libttif - -1) if GST_USING_PRINTF_EXTENSION, then prepend the fmt string with "<%P> " and -pass object as a normal arg. When using TTIF, you want the whole fmt string, -including the object name prefix, to be constant. This way, only the fmt -string pointer needs to be logged. -2) GstDebugTraceLocation: small optimization to stash __FILE__, __LINE__, and -GST_FUNCTION together and pass as a single ptr.. the optimization is probably -lost in the noise with the default printf() based traces, but makes more of a -difference with faster trace systems ---- - gst/gstinfo.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++----- - gst/gstinfo.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- - 2 files changed, 123 insertions(+), 11 deletions(-) - -diff --git a/gst/gstinfo.c b/gst/gstinfo.c -index 3688120..dfa8650 100644 ---- a/gst/gstinfo.c -+++ b/gst/gstinfo.c -@@ -494,6 +494,31 @@ gst_path_basename (const gchar * file_name) - #endif - - /** -+ * gst_debug_log2: -+ * @category: category to log -+ * @level: level of the message is in -+ * @location: the file, function name, and line number of the location that -+ * emitted the message -+ * @object: the object this message relates to or NULL if none -+ * @format: a printf style format string -+ * @...: optional arguments for the format -+ * -+ * Logs the given message using the currently registered debugging handlers. -+ */ -+void -+gst_debug_log2 (GstDebugCategory * category, GstDebugLevel level, -+ const GstDebugTraceLocation * location, -+ GObject * object, const gchar * format, ...) -+{ -+ va_list var_args; -+ -+ va_start (var_args, format); -+ gst_debug_log_valist2 (category, level, location, object, format, var_args); -+ va_end (var_args); -+} -+ -+ -+/** - * gst_debug_log_valist: - * @category: category to log - * @level: level of the message is in -@@ -512,13 +537,39 @@ gst_debug_log_valist (GstDebugCategory * category, GstDebugLevel level, - const gchar * file, const gchar * function, gint line, - GObject * object, const gchar * format, va_list args) - { -+ GstDebugTraceLocation location = { -+ .file = file, -+ .function = function, -+ .line = line -+ }; -+ gst_debug_log_valist2 (category, level, &location, object, format, args); -+} -+ -+/** -+ * gst_debug_log_valist2: -+ * @category: category to log -+ * @level: level of the message is in -+ * @location: the file, function name, and line number of the location that -+ * emitted the message -+ * @object: the object this message relates to or NULL if none -+ * @format: a printf style format string -+ * @args: optional arguments for the format -+ * -+ * Logs the given message using the currently registered debugging handlers. -+ */ -+void -+gst_debug_log_valist2 (GstDebugCategory * category, GstDebugLevel level, -+ const GstDebugTraceLocation * location, -+ GObject * object, const gchar * format, va_list args) -+{ - GstDebugMessage message; - LogFuncEntry *entry; - GSList *handler; - - g_return_if_fail (category != NULL); -- g_return_if_fail (file != NULL); -- g_return_if_fail (function != NULL); -+ g_return_if_fail (location != NULL); -+ g_return_if_fail (location->file != NULL); -+ g_return_if_fail (location->function != NULL); - g_return_if_fail (format != NULL); - - /* The predefined macro __FILE__ is always the exact path given to the -@@ -536,8 +587,9 @@ gst_debug_log_valist (GstDebugCategory * category, GstDebugLevel level, - while (handler) { - entry = handler->data; - handler = g_slist_next (handler); -- entry->func (category, level, file, function, line, object, &message, -- entry->user_data); -+ // TODO: change GstLogFunction and pass GstDebugTraceLocation ptr instead.. -+ entry->func (category, level, location->file, location->function, -+ location->line, object, &message, entry->user_data); - } - g_free (message.message); - va_end (message.arguments); -@@ -610,7 +662,7 @@ gst_info_structure_to_string (GstStructure * s) - return gst_structure_to_string (s); - } - --static gchar * -+gchar * - gst_debug_print_object (gpointer ptr) - { - GObject *object = (GObject *) ptr; -@@ -708,7 +760,7 @@ gst_debug_print_object (gpointer ptr) - - #ifdef HAVE_PRINTF_EXTENSION - --static gchar * -+gchar * - gst_debug_print_segment (gpointer ptr) - { - GstSegment *segment = (GstSegment *) ptr; -diff --git a/gst/gstinfo.h b/gst/gstinfo.h -index 7c2d86f..24ca706 100644 ---- a/gst/gstinfo.h -+++ b/gst/gstinfo.h -@@ -177,6 +177,8 @@ struct _GstDebugCategory { - - const gchar * name; - const gchar * description; -+ -+ void *ext; /**< for use by LD_PRELOADED trace extension */ - }; - - /********** some convenience macros for debugging **********/ -@@ -260,6 +262,14 @@ typedef void (*GstLogFunction) (GstDebugCategory * category, - /* FIXME 0.11: move this into private headers */ - void _gst_debug_init (void); - -+typedef struct { -+ const gchar *file; -+ const gchar *function; -+ const gint line; -+} GstDebugTraceLocation; -+ -+#define GST_DEBUG_TRACE_LOCATION() \ -+ { __FILE__, GST_FUNCTION, __LINE__ } - - #ifdef GST_USING_PRINTF_EXTENSION - -@@ -273,6 +283,13 @@ void gst_debug_log (GstDebugCategory * category, - const gchar * format, - ...) G_GNUC_NO_INSTRUMENT; - -+void gst_debug_log2 (GstDebugCategory * category, -+ GstDebugLevel level, -+ const GstDebugTraceLocation *location, -+ GObject * object, -+ const gchar * format, -+ ...) G_GNUC_NO_INSTRUMENT; -+ - #else /* GST_USING_PRINTF_EXTENSION */ - - void gst_debug_log (GstDebugCategory * category, -@@ -284,6 +301,13 @@ void gst_debug_log (GstDebugCategory * category, - const gchar * format, - ...) G_GNUC_PRINTF (7, 8) G_GNUC_NO_INSTRUMENT; - -+void gst_debug_log2 (GstDebugCategory * category, -+ GstDebugLevel level, -+ const GstDebugTraceLocation *location, -+ GObject * object, -+ const gchar * format, -+ ...) G_GNUC_PRINTF (5, 6) G_GNUC_NO_INSTRUMENT; -+ - #endif /* GST_USING_PRINTF_EXTENSION */ - - void gst_debug_log_valist (GstDebugCategory * category, -@@ -321,8 +345,21 @@ G_CONST_RETURN gchar * - _gst_debug_nameof_funcptr (GstDebugFuncPtr func) G_GNUC_NO_INSTRUMENT; - - -+void gst_debug_log_valist2 (GstDebugCategory * category, -+ GstDebugLevel level, -+ const GstDebugTraceLocation *location, -+ GObject * object, -+ const gchar * format, -+ va_list args) G_GNUC_NO_INSTRUMENT; -+ - const gchar * gst_debug_message_get (GstDebugMessage * message); - -+gchar * gst_debug_print_object (gpointer ptr); -+ -+#ifdef HAVE_PRINTF_EXTENSION -+gchar * gst_debug_print_segment (gpointer ptr); -+#endif -+ - void gst_debug_log_default (GstDebugCategory * category, - GstDebugLevel level, - const gchar * file, -@@ -495,19 +532,41 @@ GST_EXPORT GstDebugLevel __gst_debug_min; - * debugging messages. You will probably want to use one of the ones described - * below. - */ -+#if defined(GST_USING_PRINTF_EXTENSION) && defined(G_HAVE_GNUC_VARARGS) -+#define GST_CAT_LEVEL_LOG_obj(cat,level,object,str,args...) G_STMT_START{ \ -+ if (G_UNLIKELY (level <= __gst_debug_min)) { \ -+ const GstDebugTraceLocation loc = GST_DEBUG_TRACE_LOCATION(); \ -+ gst_debug_log2 ((cat), (level), &loc, NULL, "%"GST_PTR_FORMAT" "str, \ -+ (object), ##args ); \ -+ } \ -+}G_STMT_END -+#define GST_CAT_LEVEL_LOG_noobj(cat,level,object,str,args...) G_STMT_START{\ -+ if (G_UNLIKELY (level <= __gst_debug_min)) { \ -+ const GstDebugTraceLocation loc = GST_DEBUG_TRACE_LOCATION(); \ -+ gst_debug_log2 ((cat), (level), &loc, NULL, (str), ##args ); \ -+ } \ -+}G_STMT_END -+#else -+# define GST_CAT_LEVEL_LOG_obj GST_CAT_LEVEL_LOG -+# define GST_CAT_LEVEL_LOG_noobj GST_CAT_LEVEL_LOG -+#endif -+ -+ - #ifdef G_HAVE_ISO_VARARGS - #define GST_CAT_LEVEL_LOG(cat,level,object,...) G_STMT_START{ \ -- if (G_UNLIKELY (level <= __gst_debug_min)) { \ -- gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__, \ -- (GObject *) (object), __VA_ARGS__); \ -+ if (G_UNLIKELY (level <= __gst_debug_min)) { \ -+ const GstDebugTraceLocation loc = GST_DEBUG_TRACE_LOCATION(); \ -+ gst_debug_log2 ((cat), (level), &loc, (GObject *) (object), \ -+ __VA_ARGS__); \ - } \ - }G_STMT_END - #else /* G_HAVE_GNUC_VARARGS */ - #ifdef G_HAVE_GNUC_VARARGS - #define GST_CAT_LEVEL_LOG(cat,level,object,args...) G_STMT_START{ \ - if (G_UNLIKELY (level <= __gst_debug_min)) { \ -- gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__, \ -- (GObject *) (object), ##args ); \ -+ const GstDebugTraceLocation loc = GST_DEBUG_TRACE_LOCATION(); \ -+ gst_debug_log2 ((cat), (level), &loc, (GObject *) (object), \ -+ ##args ); \ - } \ - }G_STMT_END - #else /* no variadic macros, use inline */ -@@ -1244,6 +1303,7 @@ GST_TRACE (const char *format, ...) - - #if defined(__GNUC__) && __GNUC__ >= 3 - # pragma GCC poison gst_debug_log -+# pragma GCC poison gst_debug_log2 - # pragma GCC poison gst_debug_log_valist - # pragma GCC poison _gst_debug_category_new - #endif --- -1.7.1 - diff --git a/media-libs/gstreamer/files/gst-0.10.32-0003-add-GstQueryBuffers-query.patch b/media-libs/gstreamer/files/gst-0.10.32-0003-add-GstQueryBuffers-query.patch deleted file mode 100644 index 4c54083..0000000 --- a/media-libs/gstreamer/files/gst-0.10.32-0003-add-GstQueryBuffers-query.patch +++ /dev/null @@ -1,258 +0,0 @@ -From 7f071cf72491a9f60c886f4779c7d14d924bc43d Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Wed, 19 May 2010 15:48:09 -0500 -Subject: [PATCH 3/5] add GstQueryBuffers query - -This query is used by buffer allocator, for example a video sink element, -to find out any minimum buffer requirements of upstream elements that uses -pad_alloc() to allocate buffers. For example, some cameras may have need -for additional padding/boarder around the frame (for vstab), or some video -decoders may have requirements for a certain minimum number of buffers (so -they can hold refs to reference-frames) ---- - gst/gstquark.c | 3 +- - gst/gstquark.h | 7 ++- - gst/gstquery.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - gst/gstquery.h | 16 ++++++- - 4 files changed, 164 insertions(+), 3 deletions(-) - -diff --git a/gst/gstquark.c b/gst/gstquark.c -index 4073eb4..58badca 100644 ---- a/gst/gstquark.c -+++ b/gst/gstquark.c -@@ -49,7 +49,8 @@ static const gchar *_quark_strings[] = { - "GstQueryURI", "GstEventStep", "GstMessageStepDone", "amount", "flush", - "intermediate", "GstMessageStepStart", "active", "eos", "sink-message", - "message", "GstMessageQOS", "running-time", "stream-time", "jitter", -- "quality", "processed", "dropped", "buffering-ranges" -+ "quality", "processed", "dropped", "buffering-ranges", "GstQueryBuffers", -+ "caps", "count", "width", "height" - }; - - GQuark _priv_gst_quark_table[GST_QUARK_MAX]; -diff --git a/gst/gstquark.h b/gst/gstquark.h -index c95d9cd..f4c8e0f 100644 ---- a/gst/gstquark.h -+++ b/gst/gstquark.h -@@ -127,8 +127,13 @@ typedef enum _GstQuarkId - GST_QUARK_PROCESSED = 98, - GST_QUARK_DROPPED = 99, - GST_QUARK_BUFFERING_RANGES = 100, -+ GST_QUARK_QUERY_BUFFERS = 101, -+ GST_QUARK_CAPS = 102, -+ GST_QUARK_COUNT = 103, -+ GST_QUARK_WIDTH = 104, -+ GST_QUARK_HEIGHT = 105, - -- GST_QUARK_MAX = 101 -+ GST_QUARK_MAX = 106 - } GstQuarkId; - - extern GQuark _priv_gst_quark_table[GST_QUARK_MAX]; -diff --git a/gst/gstquery.c b/gst/gstquery.c -index 9373175..4823ff0 100644 ---- a/gst/gstquery.c -+++ b/gst/gstquery.c -@@ -96,6 +96,7 @@ static GstQueryTypeDefinition standard_definitions[] = { - {GST_QUERY_BUFFERING, "buffering", "Buffering status", 0}, - {GST_QUERY_CUSTOM, "custom", "Custom query", 0}, - {GST_QUERY_URI, "uri", "URI of the source or sink", 0}, -+ {GST_QUERY_BUFFERS, "buffers", "Minimum buffer requirements", 0}, - {0, NULL, NULL, 0} - }; - -@@ -1480,3 +1481,143 @@ gst_query_parse_uri (GstQuery * query, gchar ** uri) - *uri = g_value_dup_string (gst_structure_id_get_value (query->structure, - GST_QUARK (URI))); - } -+ -+/** -+ * gst_query_new_buffers: -+ * @caps: the #GstCaps for the buffers that are going to be allocated -+ * -+ * Constructs a new buffer requirements query object to query buffer -+ * requirements for a particular caps. Use gst_query_unref() when done -+ * with it. -+ * -+ * Returns: A #GstQuery -+ */ -+GstQuery * -+gst_query_new_buffers (GstCaps * caps) -+{ -+ GstQuery *query; -+ GstStructure *structure; -+ -+ /* XXX could add size here, for linear (non YUV/RGB) buffers? But I'm not -+ * entirely sure what is the use-case for that.. it should be easy enough -+ * to add more optional reply fields later -+ */ -+ structure = gst_structure_id_new (GST_QUARK (QUERY_BUFFERS), -+ GST_QUARK (CAPS), GST_TYPE_CAPS, caps, -+ GST_QUARK (COUNT), G_TYPE_INT, -1, -+ GST_QUARK (WIDTH), G_TYPE_INT, -1, -+ GST_QUARK (HEIGHT), G_TYPE_INT, -1, NULL); -+ -+ query = gst_query_new (GST_QUERY_BUFFERS, structure); -+ -+ return query; -+} -+ -+/** -+ * gst_query_set_buffers_count: -+ * @count: minimum number of buffers required -+ * -+ * Answer a buffers query by setting the minimum number of buffers required. -+ * If there is no minimum buffer count requirement, don't set this field in -+ * the query. -+ */ -+void -+gst_query_set_buffers_count (GstQuery * query, gint count) -+{ -+ GstStructure *structure; -+ -+ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS); -+ -+ structure = gst_query_get_structure (query); -+ gst_structure_id_set (structure, GST_QUARK (COUNT), G_TYPE_INT, count, NULL); -+} -+ -+/** -+ * gst_query_set_buffers_dimensions: -+ * @width: minimum buffer width -+ * @height: minimum buffer height -+ * -+ * Answer a buffers query by setting the minimum buffer dimensions required. -+ * If there is no minimum buffer dimensions (beyond the width/height specified -+ * in the #GstCaps), don't set this field in the query. -+ */ -+void -+gst_query_set_buffers_dimensions (GstQuery * query, gint width, gint height) -+{ -+ GstStructure *structure; -+ -+ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS); -+ -+ structure = gst_query_get_structure (query); -+ gst_structure_id_set (structure, -+ GST_QUARK (WIDTH), G_TYPE_INT, width, -+ GST_QUARK (HEIGHT), G_TYPE_INT, height, NULL); -+} -+ -+/** -+ * gst_query_parse_buffers_caps: -+ * @query: a #GstQuery -+ * @caps: the storage for the #GstCaps pointer, or NULL -+ * -+ * Parse a buffers query. -+ */ -+void -+gst_query_parse_buffers_caps (GstQuery * query, const GstCaps ** caps) -+{ -+ GstStructure *structure; -+ -+ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS); -+ -+ structure = gst_query_get_structure (query); -+ if (caps) -+ *caps = gst_value_get_caps (gst_structure_id_get_value (structure, -+ GST_QUARK (CAPS))); -+} -+ -+/** -+ * gst_query_parse_buffers_count: -+ * @query: a #GstQuery -+ * @count: the storage for minimum number of buffers, or NULL -+ * -+ * Parse a buffers query answer to see the minimum number of buffers -+ * required. A returned value of -1 means there is no minimum requirement -+ */ -+void -+gst_query_parse_buffers_count (GstQuery * query, gint * count) -+{ -+ GstStructure *structure; -+ -+ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS); -+ -+ structure = gst_query_get_structure (query); -+ if (count) -+ *count = g_value_get_int (gst_structure_id_get_value (structure, -+ GST_QUARK (COUNT))); -+} -+ -+/** -+ * gst_query_parse_buffers_dimensions: -+ * @query: a #GstQuery -+ * @width: the storage for minimum width, or NULL -+ * @height: the storage for minimum height, or NULL -+ * -+ * Parse a buffers query answer to see the minimum buffer dimensions required. -+ * A returned value of -1 for either dimension means there is no minimum -+ * requirement in that axis -+ */ -+void -+gst_query_parse_buffers_dimensions (GstQuery * query, gint * width, -+ gint * height) -+{ -+ GstStructure *structure; -+ -+ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS); -+ -+ structure = gst_query_get_structure (query); -+ if (width) -+ *width = g_value_get_int (gst_structure_id_get_value (structure, -+ GST_QUARK (WIDTH))); -+ if (height) -+ *height = g_value_get_int (gst_structure_id_get_value (structure, -+ GST_QUARK (HEIGHT))); -+} -diff --git a/gst/gstquery.h b/gst/gstquery.h -index 09d0225..ae1f5cd 100644 ---- a/gst/gstquery.h -+++ b/gst/gstquery.h -@@ -31,6 +31,7 @@ - #include <gst/gstminiobject.h> - #include <gst/gststructure.h> - #include <gst/gstformat.h> -+#include <gst/gstcaps.h> - - G_BEGIN_DECLS - -@@ -51,6 +52,9 @@ G_BEGIN_DECLS - * @GST_QUERY_CUSTOM: a custom application or element defined query. Since - * 0.10.22. - * @GST_QUERY_URI: query the URI of the source or sink. Since 0.10.22. -+ * @GST_QUERY_BUFFERS: query the upstream users of pad_alloc()'d buffers to -+ * find any particular requirements about buffer size (padding) or numbers of -+ * buffers. Since ?.?.?. - * - * Standard predefined Query types - */ -@@ -69,7 +73,8 @@ typedef enum { - GST_QUERY_FORMATS, - GST_QUERY_BUFFERING, - GST_QUERY_CUSTOM, -- GST_QUERY_URI -+ GST_QUERY_URI, -+ GST_QUERY_BUFFERS - } GstQueryType; - - /** -@@ -336,6 +341,15 @@ GstQuery * gst_query_new_uri (void); - void gst_query_parse_uri (GstQuery *query, gchar **uri); - void gst_query_set_uri (GstQuery *query, const gchar *uri); - -+/* buffer requirements query */ -+GstQuery * gst_query_new_buffers (GstCaps * caps); -+void gst_query_set_buffers_count (GstQuery * query, gint count); -+void gst_query_set_buffers_dimensions (GstQuery * query, gint width, gint height); -+void gst_query_parse_buffers_caps (GstQuery * query, const GstCaps ** caps); -+void gst_query_parse_buffers_count (GstQuery * query, gint * count); -+void gst_query_parse_buffers_dimensions (GstQuery * query, gint * width, gint * height); -+ -+ - G_END_DECLS - - #endif /* __GST_QUERY_H__ */ --- -1.7.1 - diff --git a/media-libs/gstreamer/files/gst-0.10.32-0004-Add-GstEventCrop-event.patch b/media-libs/gstreamer/files/gst-0.10.32-0004-Add-GstEventCrop-event.patch deleted file mode 100644 index 0730dd4..0000000 --- a/media-libs/gstreamer/files/gst-0.10.32-0004-Add-GstEventCrop-event.patch +++ /dev/null @@ -1,161 +0,0 @@ -From 20378daaef4f4adb36d879879d6ab6d007a82636 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Mon, 24 May 2010 16:49:20 -0500 -Subject: [PATCH 4/5] Add GstEventCrop event - -This event can be used to set cropping / region-of-interest to take effect -on the following buffer. ---- - gst/gstevent.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - gst/gstevent.h | 11 +++++++++ - gst/gstquark.c | 2 +- - gst/gstquark.h | 5 +++- - 4 files changed, 79 insertions(+), 2 deletions(-) - -diff --git a/gst/gstevent.c b/gst/gstevent.c -index 6d2cc8b..d04df79 100644 ---- a/gst/gstevent.c -+++ b/gst/gstevent.c -@@ -116,6 +116,7 @@ static GstEventQuarks event_quarks[] = { - {GST_EVENT_TAG, "tag", 0}, - {GST_EVENT_BUFFERSIZE, "buffersize", 0}, - {GST_EVENT_SINK_MESSAGE, "sink-message", 0}, -+ {GST_EVENT_CROP, "crop", 0}, - {GST_EVENT_QOS, "qos", 0}, - {GST_EVENT_SEEK, "seek", 0}, - {GST_EVENT_NAVIGATION, "navigation", 0}, -@@ -1231,3 +1232,65 @@ gst_event_parse_sink_message (GstEvent * event, GstMessage ** msg) - GST_MESSAGE (gst_value_dup_mini_object (gst_structure_id_get_value - (event->structure, GST_QUARK (MESSAGE)))); - } -+ -+/** -+ * gst_event_new_crop: -+ * @top: the new offset to top of sub-image -+ * @left: the new offset to left of sub-image -+ * @width: the new width -+ * @height: the new height -+ * -+ * Create a new crop event. -+ */ -+GstEvent * -+gst_event_new_crop (gint top, gint left, gint width, gint height) -+{ -+ GstEvent *event; -+ GstStructure *structure; -+ -+ GST_CAT_INFO (GST_CAT_EVENT, "creating crop event: %d,%d %dx%d", -+ top, left, width, height); -+ -+ structure = gst_structure_id_new (GST_QUARK (EVENT_CROP), -+ GST_QUARK (TOP), G_TYPE_INT, top, -+ GST_QUARK (LEFT), G_TYPE_INT, left, -+ GST_QUARK (WIDTH), G_TYPE_INT, width, -+ GST_QUARK (HEIGHT), G_TYPE_INT, height, NULL); -+ event = gst_event_new_custom (GST_EVENT_CROP, structure); -+ -+ return event; -+} -+ -+/** -+ * gst_event_parse_crop: -+ * @event: The event to query -+ * @top: A pointer to store top offset in -+ * @left: A pointer to store left offset in -+ * @width: A pointer to store width in -+ * @height: A pointer to store height in -+ * -+ * Parse the crop event. -+ */ -+void -+gst_event_parse_crop (GstEvent * event, gint * top, gint * left, -+ gint * width, gint * height) -+{ -+ const GstStructure *structure; -+ -+ g_return_if_fail (GST_IS_EVENT (event)); -+ g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_CROP); -+ -+ structure = gst_event_get_structure (event); -+ if (top) -+ *top = g_value_get_int (gst_structure_id_get_value (structure, -+ GST_QUARK (TOP))); -+ if (left) -+ *left = g_value_get_int (gst_structure_id_get_value (structure, -+ GST_QUARK (LEFT))); -+ if (width) -+ *width = g_value_get_int (gst_structure_id_get_value (structure, -+ GST_QUARK (WIDTH))); -+ if (height) -+ *height = g_value_get_int (gst_structure_id_get_value (structure, -+ GST_QUARK (HEIGHT))); -+} -diff --git a/gst/gstevent.h b/gst/gstevent.h -index 9568514..ae08829 100644 ---- a/gst/gstevent.h -+++ b/gst/gstevent.h -@@ -93,6 +93,10 @@ typedef enum { - * @GST_EVENT_SINK_MESSAGE: An event that sinks turn into a message. Used to - * send messages that should be emitted in sync with - * rendering. -+ * @GST_EVENT_CROP: An event that can set horizontal (pan/scan) and vertical -+ * (tilt/scan) offset and width/height within a larger -+ * image. This event precedes the buffer to which it -+ * applies. - * @GST_EVENT_QOS: A quality message. Used to indicate to upstream elements - * that the downstream elements are being starved of or - * flooded with data. -@@ -133,6 +137,7 @@ typedef enum { - GST_EVENT_TAG = GST_EVENT_MAKE_TYPE (7, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - GST_EVENT_BUFFERSIZE = GST_EVENT_MAKE_TYPE (8, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - GST_EVENT_SINK_MESSAGE = GST_EVENT_MAKE_TYPE (9, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), -+ GST_EVENT_CROP = GST_EVENT_MAKE_TYPE (10, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)), - /* upstream events */ - GST_EVENT_QOS = GST_EVENT_MAKE_TYPE (15, FLAG(UPSTREAM)), - GST_EVENT_SEEK = GST_EVENT_MAKE_TYPE (16, FLAG(UPSTREAM)), -@@ -484,6 +489,12 @@ GstEvent* gst_event_new_step (GstFormat format, guint64 amoun - void gst_event_parse_step (GstEvent *event, GstFormat *format, guint64 *amount, - gdouble *rate, gboolean *flush, gboolean *intermediate); - -+/* crop event */ -+GstEvent * gst_event_new_crop (gint top, gint left, gint width, gint height); -+void gst_event_parse_crop (GstEvent * event, gint * top, gint * left, -+ gint * width, gint * height); -+ -+ - G_END_DECLS - - #endif /* __GST_EVENT_H__ */ -diff --git a/gst/gstquark.c b/gst/gstquark.c -index 58badca..f8716cc 100644 ---- a/gst/gstquark.c -+++ b/gst/gstquark.c -@@ -50,7 +50,7 @@ static const gchar *_quark_strings[] = { - "intermediate", "GstMessageStepStart", "active", "eos", "sink-message", - "message", "GstMessageQOS", "running-time", "stream-time", "jitter", - "quality", "processed", "dropped", "buffering-ranges", "GstQueryBuffers", -- "caps", "count", "width", "height" -+ "caps", "count", "width", "height", "GstEventCrop", "top", "left" - }; - - GQuark _priv_gst_quark_table[GST_QUARK_MAX]; -diff --git a/gst/gstquark.h b/gst/gstquark.h -index f4c8e0f..6eeb77f 100644 ---- a/gst/gstquark.h -+++ b/gst/gstquark.h -@@ -132,8 +132,11 @@ typedef enum _GstQuarkId - GST_QUARK_COUNT = 103, - GST_QUARK_WIDTH = 104, - GST_QUARK_HEIGHT = 105, -+ GST_QUARK_EVENT_CROP = 106, -+ GST_QUARK_TOP = 107, -+ GST_QUARK_LEFT = 108, - -- GST_QUARK_MAX = 106 -+ GST_QUARK_MAX = 109 - } GstQuarkId; - - extern GQuark _priv_gst_quark_table[GST_QUARK_MAX]; --- -1.7.1 - diff --git a/media-libs/gstreamer/files/gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch b/media-libs/gstreamer/files/gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch deleted file mode 100644 index 27c7daa..0000000 --- a/media-libs/gstreamer/files/gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 45650b7b1dfcaaa2b165a6d263b6dc74449c501c Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Wed, 26 May 2010 14:42:40 -0500 -Subject: [PATCH 5/5] basetransform: don't do unnecessary pad_alloc() - -Don't allocate a buffer in passthrough mode. ---- - libs/gst/base/gstbasetransform.c | 28 ++++++++++++++++++++-------- - 1 files changed, 20 insertions(+), 8 deletions(-) - -diff --git a/libs/gst/base/gstbasetransform.c b/libs/gst/base/gstbasetransform.c -index 57192ab..1416b8e 100644 ---- a/libs/gst/base/gstbasetransform.c -+++ b/libs/gst/base/gstbasetransform.c -@@ -2188,14 +2188,26 @@ gst_base_transform_handle_buffer (GstBaseTransform * trans, GstBuffer * inbuf, - - no_qos: - -- /* first try to allocate an output buffer based on the currently negotiated -- * format. While we call pad-alloc we could renegotiate the srcpad format or -- * have a new suggestion for upstream buffer-alloc. -- * In any case, outbuf will contain a buffer suitable for doing the configured -- * transform after this function. */ -- ret = gst_base_transform_prepare_output_buffer (trans, inbuf, outbuf); -- if (G_UNLIKELY (ret != GST_FLOW_OK)) -- goto no_buffer; -+ if (trans->passthrough) { -+ /* I'm not yet sure if we should bypass allocating output buffer in case of -+ * passthrough, or if I should override the prepare_output_buffer vmethod.. -+ * I think the argument for always doing buffer allocation is to give a -+ * chance for upstream caps-renegotiation.. except I think the existing -+ * gst_base_transform_buffer_alloc() which itself does a pad_alloc() should -+ * be sufficient.. -+ */ -+ GST_DEBUG_OBJECT (trans, "reuse input buffer"); -+ *outbuf = inbuf; -+ } else { -+ /* first try to allocate an output buffer based on the currently negotiated -+ * format. While we call pad-alloc we could renegotiate the srcpad format or -+ * have a new suggestion for upstream buffer-alloc. -+ * In any case, outbuf will contain a buffer suitable for doing the configured -+ * transform after this function. */ -+ ret = gst_base_transform_prepare_output_buffer (trans, inbuf, outbuf); -+ if (G_UNLIKELY (ret != GST_FLOW_OK)) -+ goto no_buffer; -+ } - - /* now perform the needed transform */ - if (trans->passthrough) { --- -1.7.1 - diff --git a/media-libs/gstreamer/gstreamer-0.10.32_p20110127.ebuild b/media-libs/gstreamer/gstreamer-0.10.32_p20110127.ebuild deleted file mode 100644 index f6879a1..0000000 --- a/media-libs/gstreamer/gstreamer-0.10.32_p20110127.ebuild +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI=2 - -inherit eutils multilib versionator - -# Create a major/minor combo for our SLOT and executables suffix -PV_MAJ_MIN=$(get_version_component_range '1-2') - -DESCRIPTION="Streaming media framework" -HOMEPAGE="http://gstreamer.sourceforge.net" -MY_P=${P%%_*} -SRC_URI="http://${PN}.freedesktop.org/src/${PN}/${MY_P}.tar.bz2" -S="${WORKDIR}/${MY_P}" - -LICENSE="LGPL-2" -SLOT=${PV_MAJ_MIN} -KEYWORDS="~alpha ~amd64 arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd" -IUSE="+introspection nls test" - -RDEPEND=">=dev-libs/glib-2.20:2 - dev-libs/libxml2 - introspection? ( >=dev-libs/gobject-introspection-0.6.3 ) - !<media-libs/gst-plugins-base-0.10.26" - # ^^ queue2 move, mustn't have both libgstcoreleements.so and libgstqueue2.so at runtime providing the element at once -DEPEND="${RDEPEND} - dev-util/pkgconfig - dev-util/gtk-doc-am - nls? ( sys-devel/gettext )" - -src_configure() { - # Disable static archives, dependency tracking and examples - # to speed up build time - econf \ - --disable-static \ - --disable-dependency-tracking \ - $(use_enable nls) \ - --disable-valgrind \ - --disable-examples \ - --enable-check \ - $(use_enable introspection) \ - $(use_enable test tests) \ - --with-package-name="GStreamer ebuild for Gentoo" \ - --with-package-origin="http://packages.gentoo.org/package/media-libs/gstreamer" -} - -src_prepare() { - cd ${S} - epatch "${FILESDIR}"/gst-0.10.32-0001-gst-launch-add-loop-argument.patch - epatch "${FILESDIR}"/gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch - epatch "${FILESDIR}"/gst-0.10.32-0003-add-GstQueryBuffers-query.patch - epatch "${FILESDIR}"/gst-0.10.32-0004-Add-GstEventCrop-event.patch - epatch "${FILESDIR}"/gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch -} - -src_install() { - emake DESTDIR="${D}" install || die "emake install failed." - dodoc AUTHORS ChangeLog NEWS MAINTAINERS README RELEASE - - # Remove unversioned binaries to allow SLOT installations in future - cd "${D}"/usr/bin - local gst_bins - for gst_bins in $(ls *-${PV_MAJ_MIN}); do - rm -f ${gst_bins/-${PV_MAJ_MIN}/} - done -} diff --git a/media-libs/syslink-d2c/Manifest b/media-libs/syslink-d2c/Manifest deleted file mode 100644 index 8a6d7ac..0000000 --- a/media-libs/syslink-d2c/Manifest +++ /dev/null @@ -1 +0,0 @@ -EBUILD syslink-d2c-24.11_p1-r0.ebuild 843 RMD160 bfe6b5ecfb5a6acae52e236dc67b6dfc8f38ff36 SHA1 1370b7482e35cbbde3b7e6e4b79571975b36ec62 SHA256 3ce24272aa527c1fc8daa5f5b1f0076ec58902b46ffda27e5b4806cd4494c591 diff --git a/media-libs/syslink-d2c/syslink-d2c-24.11_p1-r0.ebuild b/media-libs/syslink-d2c/syslink-d2c-24.11_p1-r0.ebuild deleted file mode 100644 index 01ed095..0000000 --- a/media-libs/syslink-d2c/syslink-d2c-24.11_p1-r0.ebuild +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI=2 - -inherit git autotools eutils - -DESCRIPTION="Distributed OpenMAX for OMAP4 processors" -HOMEPAGE="http://dev.omapzoom.org/?p=tisyslink/userspace-syslink.git;a=summary" -DEPEND=">=media-libs/syslink-24.11" -LICENSE="BSD" -KEYWORDS="arm" -SLOT="0" -IUSE="" - -SRC_URI="" -NPV=${PV/_/-}; NPV=${NPV^^} -EGIT_REPO_URI="git://git.omapzoom.org/platform/hardware/ti/syslink.git" -EGIT_BRANCH="syslink-2.0" -# FIXME: Can't use tags? -#EGIT_COMMIT="ti-syslink-mpu-rls-${NPV}" -EGIT_COMMIT="16f0cebd8b5a430d943bc6bcfa0fe592bad425b9" -S="${WORKDIR}/${P}/syslink/d2c" - -src_unpack() { - MY_S="${WORKDIR}/${P}" - S=${MY_S} git_src_unpack -} - -src_prepare() { - cd ${S} && ./bootstrap.sh - eautoreconf -} - -src_install() { - emake install DESTDIR="${D}" -} diff --git a/media-libs/syslink/Manifest b/media-libs/syslink/Manifest deleted file mode 100644 index 5e525fc..0000000 --- a/media-libs/syslink/Manifest +++ /dev/null @@ -1,2 +0,0 @@ -AUX add-missing-libraries-to-linker.patch 1941 RMD160 b3508605749e7b83261a851d836c217f01aeaa65 SHA1 52ecbe1f189f8a3b53cf55463f71a9f64481e5ab SHA256 8ed1ac4ee5318c3420491bb72690b9fdb20f47510e44437c7187cf998bcfd9ee -EBUILD syslink-24.11_p1-r0.ebuild 879 RMD160 0f3f74c0b79f68adcce999ce46d43a4437b04d67 SHA1 90e0825579d887b4eaa6f962f5d802920f8c8de8 SHA256 0faec0c8a51cfb9938bc110018007e4f9a11cb639fca087edacbff27af11d8de diff --git a/media-libs/syslink/files/add-missing-libraries-to-linker.patch b/media-libs/syslink/files/add-missing-libraries-to-linker.patch deleted file mode 100644 index 070933b..0000000 --- a/media-libs/syslink/files/add-missing-libraries-to-linker.patch +++ /dev/null @@ -1,52 +0,0 @@ -From e483e75b27c7cb0bef5d11892963a115689845c8 Mon Sep 17 00:00:00 2001 -From: Daniel Diaz <ddiaz@ti.com> -Date: Fri, 21 Jan 2011 17:03:14 -0600 -Subject: [PATCH] Add missing libraries to linker. - -An undefined symbol appears on run-time: - gst-launch-0.10: symbol lookup error: /usr/lib/libsysmgr.so.0: - undefined symbol: Notify_getConfig - -This is also shown when building with --as-needed during the -linking stage. - -Signed-off-by: Daniel Diaz <ddiaz@ti.com> ---- - syslink/api/src/ipc/Makefile.am | 1 + - syslink/api/src/notify/Makefile.am | 2 +- - syslink/api/src/sysmgr/Makefile.am | 2 +- - 3 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/syslink/api/src/ipc/Makefile.am b/syslink/api/src/ipc/Makefile.am -index ba698f1..173b334 100644 ---- a/syslink/api/src/ipc/Makefile.am -+++ b/syslink/api/src/ipc/Makefile.am -@@ -59,3 +59,4 @@ libipc_la_LIBTOOLFLAGS = --tag=disable-static - libipc_la_CFLAGS = \ - -I$(PROJROOT)/api/include - -+libipc_la_LDFLAGS = -lipcutils -diff --git a/syslink/api/src/notify/Makefile.am b/syslink/api/src/notify/Makefile.am -index 5c80c78..659fd4f 100644 ---- a/syslink/api/src/notify/Makefile.am -+++ b/syslink/api/src/notify/Makefile.am -@@ -47,5 +47,5 @@ libsyslinknotify_la_CFLAGS = \ - -I$(PROJROOT)/api/include/linux - - libsyslinknotify_la_LIBTOOLFLAGS = --tag=disable-static --libsyslinknotify_la_LDFLAGS = -version-info 0:0:0 -+libsyslinknotify_la_LDFLAGS = -version-info 0:0:0 -lipc - libsyslinknotify_la_LIBADD = ../../src/utils/libipcutils.la -diff --git a/syslink/api/src/sysmgr/Makefile.am b/syslink/api/src/sysmgr/Makefile.am -index ea958b5..0c5dfbf 100644 ---- a/syslink/api/src/sysmgr/Makefile.am -+++ b/syslink/api/src/sysmgr/Makefile.am -@@ -45,4 +45,4 @@ libsysmgr_la_CFLAGS = \ - -I$(PROJROOT)/api/include - - libsysmgr_la_LIBTOOLFLAGS = --tag=disable-static --libsysmgr_la_LDFLAGS = -version-info 0:0:0 -+libsysmgr_la_LDFLAGS = -version-info 0:0:0 -lsyslinknotify -lipc -lprocmgr --- -1.7.3.4 - diff --git a/media-libs/syslink/syslink-24.11_p1-r0.ebuild b/media-libs/syslink/syslink-24.11_p1-r0.ebuild deleted file mode 100644 index 578ef58..0000000 --- a/media-libs/syslink/syslink-24.11_p1-r0.ebuild +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI=2 - -inherit git autotools eutils - -DESCRIPTION="Distributed OpenMAX for OMAP4 processors" -HOMEPAGE="http://dev.omapzoom.org/?p=tisyslink/userspace-syslink.git;a=summary" -DEPEND=">=media-libs/tiler-24.11" -LICENSE="BSD" -KEYWORDS="arm" -SLOT="0" -IUSE="" - -SRC_URI="" -NPV=${PV/_/-}; NPV=${NPV^^} -EGIT_REPO_URI="git://git.omapzoom.org/platform/hardware/ti/syslink.git" -EGIT_BRANCH="syslink-2.0" -# FIXME: Can't use tags? -#EGIT_COMMIT="ti-syslink-mpu-rls-${NPV}" -EGIT_COMMIT="16f0cebd8b5a430d943bc6bcfa0fe592bad425b9" -S="${WORKDIR}/${P}/syslink" - -src_unpack() { - MY_S="${WORKDIR}/${P}" - S=${MY_S} git_src_unpack - cd ${S} - epatch "${FILESDIR}"/add-missing-libraries-to-linker.patch -} - -src_prepare() { - eautoreconf -} - -src_install() { - emake install DESTDIR="${D}" -} diff --git a/media-libs/tiler/Manifest b/media-libs/tiler/Manifest deleted file mode 100644 index dd0556d..0000000 --- a/media-libs/tiler/Manifest +++ /dev/null @@ -1 +0,0 @@ -EBUILD tiler-24.11-r0.ebuild 776 RMD160 e9aa02bdb189806c7af3a62d5e1001afe8c5cb24 SHA1 8abb2ca2f7036ec1f436eb6c4cd664584355281f SHA256 76cf528272302c11db4f0ece3dbb6d194952c2762f6ae5c81f68647cea61d7fc diff --git a/media-libs/tiler/tiler-24.11-r0.ebuild b/media-libs/tiler/tiler-24.11-r0.ebuild deleted file mode 100644 index f78ef5c..0000000 --- a/media-libs/tiler/tiler-24.11-r0.ebuild +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI=2 - -inherit git autotools eutils libtool - -DESCRIPTION="TI TILER Memory Manager" -HOMEPAGE="http://dev.omapzoom.org/?p=tiler/tiler-userspace.git;a=summary" -#DEPEND="" -LICENSE="BSD" -KEYWORDS="arm" -SLOT="0" -IUSE="" - -SRC_URI="" -NPV=${PV/_/-}; NPV=${NPV^^} -EGIT_REPO_URI="git://git.omapzoom.org/platform/hardware/ti/tiler.git" -EGIT_BRANCH="memmgr_1.0" -# FIXME: Can't use tags? -#EGIT_COMMIT="${NPV}" -EGIT_COMMIT="d74be6020e970228f6bd25112fde12ecb4322f65" -S="${WORKDIR}/${P}/memmgr" - -src_unpack() { - MY_S="${WORKDIR}/${P}" - S=${MY_S} git_src_unpack -} - -src_prepare() { - cd ${S} && ./bootstrap.sh - eautoreconf -} - -src_install() { - emake DESTDIR="${D}" install -} diff --git a/media-plugins/gst-openmax/Manifest b/media-plugins/gst-openmax/Manifest deleted file mode 100644 index 267cb15..0000000 --- a/media-plugins/gst-openmax/Manifest +++ /dev/null @@ -1,5 +0,0 @@ -AUX 0001-videoenc-use-shared-buffers-on-output-port.patch 1030 RMD160 9bc17ddad4dc11c4441c48c90a2be9911bca8f8a SHA1 f3d45516e503c499c1e9b923cbe580abfe480328 SHA256 0c2b74ab2450ef6844e56e9a5a71f7b5243e305883c71a6da4867068f53039ff -AUX 0002-Replace-deprecated-vstab-event-with-crop-event.patch 2428 RMD160 291b42e0f784dc7d6e3a492606ead5da072274bc SHA1 5aef9bcb25dbd3337f4b7bf6800652188335e880 SHA256 6298e7fd9291e2909c156828cec712417c8e908bf431e08d8668ceb162899ead -AUX 0099-temp-32k-header-dec10.patch 1930 RMD160 743ce70a08f6927ee472acc719d138d58d9f23dd SHA1 c71328428a9bfeb63f53796ad305a4a08730fa5c SHA256 07b53f8b658281a231d134897ad9c0b94e6273304bf22b47ae658244144b2d1a -AUX 0099-temp-32k-header-nov10.patch 1954 RMD160 abe12ee817de3f04dd47c0eebcff90ff1d7605ac SHA1 39f6d0eeda27c40fe44b8a6a95d6b360d86fd4f0 SHA256 18a081eee5edc65a73eb9f0be4565586ea6a67581c5bc914a439e0ef92e33e9c -EBUILD gst-openmax-9999.ebuild 1003 RMD160 afd1226abe7fdd72c1f6c27933514573bc077f49 SHA1 e1446fa76e546b116115a96f57ae10658b01dccf SHA256 050c35b1cc8b92a9203263ce9a5b1ef7899c580c94737c512140a3abe3fa216c diff --git a/media-plugins/gst-openmax/files/0001-videoenc-use-shared-buffers-on-output-port.patch b/media-plugins/gst-openmax/files/0001-videoenc-use-shared-buffers-on-output-port.patch deleted file mode 100644 index ff10376..0000000 --- a/media-plugins/gst-openmax/files/0001-videoenc-use-shared-buffers-on-output-port.patch +++ /dev/null @@ -1,27 +0,0 @@ -From: Alejandro Gonzalez <a-gonzalez@ti.com> -Date: Sat, 1 Jan 2000 00:03:26 +0000 (-0600) -Subject: videoenc: Use shared buffers on output port. -X-Git-Url: http://dev.omapzoom.org/?p=gstreamer%2Fgst-openmax.git;a=commitdiff_plain;h=0a0543a76ff2989d070693490b78625657a6c684 - -videoenc: Use shared buffers on output port. - -Acked-by: Kiran Nataraju <knataraju@ti.com> -Signed-off-by: Daniel Diaz <ddiaz@ti.com> ---- - -diff --git a/omx/gstomx_base_videoenc.c b/omx/gstomx_base_videoenc.c -index bdbd59b..c550e5e 100644 ---- a/omx/gstomx_base_videoenc.c -+++ b/omx/gstomx_base_videoenc.c -@@ -332,9 +332,9 @@ type_instance_init (GTypeInstance *instance, - omx_base->omx_setup = omx_setup; - - omx_base->in_port->omx_allocate = FALSE; -- omx_base->out_port->omx_allocate = TRUE; -+ omx_base->out_port->omx_allocate = FALSE; - omx_base->in_port->share_buffer = TRUE; -- omx_base->out_port->share_buffer = FALSE; -+ omx_base->out_port->share_buffer = TRUE; - - gst_pad_set_setcaps_function (omx_base->sinkpad, sink_setcaps); - diff --git a/media-plugins/gst-openmax/files/0002-Replace-deprecated-vstab-event-with-crop-event.patch b/media-plugins/gst-openmax/files/0002-Replace-deprecated-vstab-event-with-crop-event.patch deleted file mode 100644 index cc6bea2..0000000 --- a/media-plugins/gst-openmax/files/0002-Replace-deprecated-vstab-event-with-crop-event.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 74e364b3a4f6d64d14a56c0b527cd1530e0df917 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 24 Dec 2010 21:01:06 -0600 -Subject: [PATCH] Replace deprecated vstab event with crop event. - -Signed-off-by: Daniel Diaz <ddiaz@ti.com> ---- - omx/gstomx_base_videodec.c | 5 +++-- - omx/gstomx_base_videoenc.c | 4 ++-- - omx/gstomx_camera.c | 5 +++-- - 3 files changed, 8 insertions(+), 6 deletions(-) - -diff --git a/omx/gstomx_base_videodec.c b/omx/gstomx_base_videodec.c -index dd35c8c..299a947 100644 ---- a/omx/gstomx_base_videodec.c -+++ b/omx/gstomx_base_videodec.c -@@ -77,8 +77,9 @@ push_buffer (GstOmxBaseFilter *omx_base, GstBuffer *buf) - if (n_offset) - { - gst_pad_push_event (omx_base->srcpad, -- gst_event_new_vstab (n_offset / self->rowstride, /* top */ -- n_offset % self->rowstride)); /* left */ -+ gst_event_new_crop (n_offset / self->rowstride, /* top */ -+ n_offset % self->rowstride, /* left */ -+ -1, -1)); /* width/height: can be invalid for now */ - } - return parent_class->push_buffer (omx_base, buf); - } -diff --git a/omx/gstomx_base_videoenc.c b/omx/gstomx_base_videoenc.c -index c550e5e..a83eb3d 100644 ---- a/omx/gstomx_base_videoenc.c -+++ b/omx/gstomx_base_videoenc.c -@@ -303,10 +303,10 @@ pad_event (GstPad *pad, GstEvent *event) - - switch (GST_EVENT_TYPE (event)) - { -- case GST_EVENT_VSTAB: -+ case GST_EVENT_CROP: - { - gint top, left; -- gst_event_parse_vstab (event, &top, &left); -+ gst_event_parse_crop (event, &top, &left, NULL, NULL); - - omx_base->in_port->n_offset = (self->rowstride * top) + left; - -diff --git a/omx/gstomx_camera.c b/omx/gstomx_camera.c -index ca03de4..dc3130e 100644 ---- a/omx/gstomx_camera.c -+++ b/omx/gstomx_camera.c -@@ -1509,8 +1509,9 @@ create (GstBaseSrc *gst_base, - - if (n_offset) - { -- vstab_evt = gst_event_new_vstab (n_offset / self->rowstride, /* top */ -- n_offset % self->rowstride); /* left */ -+ vstab_evt = gst_event_new_crop (n_offset / self->rowstride, /* top */ -+ n_offset % self->rowstride, /* left */ -+ -1, -1); /* width/height: we can just give invalid for now */ - gst_pad_push_event (GST_BASE_SRC (self)->srcpad, - gst_event_ref (vstab_evt)); - } --- -1.7.1 - diff --git a/media-plugins/gst-openmax/files/0099-temp-32k-header-dec10.patch b/media-plugins/gst-openmax/files/0099-temp-32k-header-dec10.patch deleted file mode 100644 index e85ad31..0000000 --- a/media-plugins/gst-openmax/files/0099-temp-32k-header-dec10.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 45d23a18eb366220992e367422b958699be55623 Mon Sep 17 00:00:00 2001 -From: Olivier Naudan <o-naudan@ti.com> -Date: Thu, 16 Dec 2010 13:10:03 +0100 -Subject: [PATCH] Temporary patch to access OMAP 32K timer (not yet exported by the kernel) - ---- - omx/gstomx_camera.c | 2 +- - omx/timer-32k.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 49 insertions(+), 1 deletions(-) - create mode 100644 omx/timer-32k.h - -diff --git a/omx/gstomx_camera.c b/omx/gstomx_camera.c -index 9a33cfb..fc73422 100644 ---- a/omx/gstomx_camera.c -+++ b/omx/gstomx_camera.c -@@ -34,7 +34,7 @@ - #include <stdint.h> - #include <fcntl.h> - #include <sys/ioctl.h> --#include <linux/timer-32k.h> -+#include "timer-32k.h" - #include <OMX_CoreExt.h> - #include <OMX_IndexExt.h> - -diff --git a/omx/timer-32k.h b/omx/timer-32k.h -new file mode 100644 -index 0000000..98fc2dc ---- /dev/null -+++ b/omx/timer-32k.h -@@ -0,0 +1,48 @@ -+/* -+ * OMAP2/3/4 timer32k driver interface -+ * -+ * Copyright (C) 2010 Texas Instruments, Inc -+ * -+ * This file is subject to the terms and conditions of the GNU General Public -+ * License. See the file "COPYING" in the main directory of this archive -+ * for more details. -+ */ -+ -+#ifndef __LINUX_TIMER_32_H__ -+#define __LINUX_TIMER_32_H__ -+ -+#include <linux/ioctl.h> -+#define OMAP_32K_READ _IOWR('t', 0, uint32_t) -+#define OMAP_32K_READRAW _IOWR('t', 1, uint32_t) -+ -+#ifndef __KERNEL__ -+ -+#include <stdint.h> -+#include <fcntl.h> -+#include <sys/ioctl.h> -+ -+static inline uint32_t __omap_32k_call(int nr) -+{ -+ static int fd; -+ if (!fd) -+ fd = open("/dev/timer32k", 0); -+ -+ if (fd) { -+ uint32_t t; -+ if (ioctl(fd, nr, &t) >= 0) -+ return t; -+ } -+ return 0; -+} -+static inline uint32_t omap_32k_read(void) -+{ -+ return __omap_32k_call(OMAP_32K_READ); -+} -+static inline uint32_t omap_32k_readraw(void) -+{ -+ return __omap_32k_call(OMAP_32K_READRAW); -+} -+#endif -+ -+#endif /* __LINUX_TIMER_32_H__ */ -+ --- -1.7.1 - diff --git a/media-plugins/gst-openmax/files/0099-temp-32k-header-nov10.patch b/media-plugins/gst-openmax/files/0099-temp-32k-header-nov10.patch deleted file mode 100644 index 2851032..0000000 --- a/media-plugins/gst-openmax/files/0099-temp-32k-header-nov10.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 1c2c1413e6777865c037ba3d849da69cf9342b0a Mon Sep 17 00:00:00 2001 -From: Daniel Diaz <ddiaz@ti.com> -Date: Thu, 20 Jan 2011 16:21:18 -0600 -Subject: [PATCH] Temporary patch to access OMAP 32K timer (not yet exported by the kernel) - -Signed-off-by: Daniel Diaz <ddiaz@ti.com> ---- - omx/gstomx_camera.c | 2 +- - omx/timer-32k.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 49 insertions(+), 1 deletions(-) - create mode 100644 omx/timer-32k.h - -diff --git a/omx/gstomx_camera.c b/omx/gstomx_camera.c -index 8e3983e..eb101fd 100644 ---- a/omx/gstomx_camera.c -+++ b/omx/gstomx_camera.c -@@ -34,7 +34,7 @@ - #include <stdint.h> - #include <fcntl.h> - #include <sys/ioctl.h> --#include <linux/timer-32k.h> -+#include "timer-32k.h" - - /** - * SECTION:element-omx_camerasrc -diff --git a/omx/timer-32k.h b/omx/timer-32k.h -new file mode 100644 -index 0000000..98fc2dc ---- /dev/null -+++ b/omx/timer-32k.h -@@ -0,0 +1,48 @@ -+/* -+ * OMAP2/3/4 timer32k driver interface -+ * -+ * Copyright (C) 2010 Texas Instruments, Inc -+ * -+ * This file is subject to the terms and conditions of the GNU General Public -+ * License. See the file "COPYING" in the main directory of this archive -+ * for more details. -+ */ -+ -+#ifndef __LINUX_TIMER_32_H__ -+#define __LINUX_TIMER_32_H__ -+ -+#include <linux/ioctl.h> -+#define OMAP_32K_READ _IOWR('t', 0, uint32_t) -+#define OMAP_32K_READRAW _IOWR('t', 1, uint32_t) -+ -+#ifndef __KERNEL__ -+ -+#include <stdint.h> -+#include <fcntl.h> -+#include <sys/ioctl.h> -+ -+static inline uint32_t __omap_32k_call(int nr) -+{ -+ static int fd; -+ if (!fd) -+ fd = open("/dev/timer32k", 0); -+ -+ if (fd) { -+ uint32_t t; -+ if (ioctl(fd, nr, &t) >= 0) -+ return t; -+ } -+ return 0; -+} -+static inline uint32_t omap_32k_read(void) -+{ -+ return __omap_32k_call(OMAP_32K_READ); -+} -+static inline uint32_t omap_32k_readraw(void) -+{ -+ return __omap_32k_call(OMAP_32K_READRAW); -+} -+#endif -+ -+#endif /* __LINUX_TIMER_32_H__ */ -+ --- -1.7.3.4 - diff --git a/media-plugins/gst-openmax/gst-openmax-9999.ebuild b/media-plugins/gst-openmax/gst-openmax-9999.ebuild deleted file mode 100644 index 8589fe5..0000000 --- a/media-plugins/gst-openmax/gst-openmax-9999.ebuild +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI=3 - -inherit git autotools - -DESCRIPTION="GStreamer plug-in that allows communication with OpenMAX IL components" -HOMEPAGE="http://freedesktop.org/wiki/GstOpenMAX" -EGIT_REPO_URI="git://github.com/mrchapp/gst-openmax.git" -EGIT_BRANCH="gst-24.11-rc" -EGIT_COMMIT="3214d731aefae7d2b5f0b69f126dc993a972cfd4" - -LICENSE="LGPL" -SLOT="0" -KEYWORDS="~arm" -IUSE="" - -DEPEND=">=media-libs/gst-plugins-base-0.10.31 >=media-libs/gstreamer-0.10.31 >=media-libs/domx-24.11" -RDEPEND="${DEPEND}" - -src_unpack() { - git_src_unpack - cd ${S} - epatch "${FILESDIR}"/0001-videoenc-use-shared-buffers-on-output-port.patch - epatch "${FILESDIR}"/0002-Replace-deprecated-vstab-event-with-crop-event.patch - epatch "${FILESDIR}"/0099-temp-32k-header-nov10.patch -} - -src_prepare() { - git describe --tags --always > .version - eautoreconf -} - -src_install() { - emake DESTDIR=${D} install || die 'emake install failed.' -} diff --git a/media-plugins/gst-plugins-v4l2/Manifest b/media-plugins/gst-plugins-v4l2/Manifest deleted file mode 100644 index 4a10510..0000000 --- a/media-plugins/gst-plugins-v4l2/Manifest +++ /dev/null @@ -1,14 +0,0 @@ -AUX gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch 1699 RMD160 ee58e52c89ed3ac10ece5f24b2607461f693abb3 SHA1 5f93921349aa383b9f9a70f1ce62128eda6d9411 SHA256 b99e9322ba836e6de4df144ff5a6454bb4175a84713a9610fce3ff83402f82d5 -AUX gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch 4255 RMD160 fe2024baf7398c83cec0c0adfdd649733a967482 SHA1 483ec498ce795764475b7e486560ae43ac12737c SHA256 08595843b8fddb76661aaec9b3d84791edf72226dc323050ca94ed1aebc49949 -AUX gst-0.10.27-0003-v4l2sink-Add-flip-property.patch 5880 RMD160 1fc14e374dc56b52cc16d189c3b87e0508b323fb SHA1 8475701469ea33dc355a0a030dc20a5d9a2a0e2f SHA256 42864937012aaede7fbd0ebd78b06be6b6326f99a0770ec6ec6ac57426004445 -AUX gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch 2205 RMD160 da01e8eb31d528971113679984e51f9e7d7e0326 SHA1 07ad77fe137d8c4548320f582d3cc88928e943c2 SHA256 7cca5ec0adf3ac20c7a400bf209523c9135cadb9292cbd219b631d588a3800af -AUX gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch 1136 RMD160 2ba17fb3194790c60ab297a3cfbde4089575555d SHA1 f18af7103413df180b3eab08c4abe655d7a63ed3 SHA256 fa8486abf8bd9c12d2d29fe3077485e1ca77af9e39ef4a9b48a7d1ea696c2d85 -AUX gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch 884 RMD160 5e18ee173f9749a46de9a146a4c6e0113f02281d SHA1 1bfab5660c9f5354eb6daed48a965824675bc07a SHA256 1cfcd14afba356fd6c6180b8f1018174e392d9cc9690870f5dd06918ef3454e5 -AUX gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch 3392 RMD160 a7a197667a9fd0ca8d47125a8205f58f81e110cb SHA1 b650b0474355775a5bcb5b89090798e226786632 SHA256 5621c6c3c1a4a49c62faeffbe320e76a4c45d5ecf6c3ecb29adbe2eed25c64b4 -AUX gst-0.10.27-0008-add-rowstride-support.patch 20547 RMD160 cb4bf8074160cad277ba5754427a79cf42a139ed SHA1 60ac23640e799e558fce406e650ebe47b27645c4 SHA256 7ba17339344fe2f0b8e665cd1fd41e96c6543f2d38c4eeffbd071c6c2c21d407 -AUX gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch 4209 RMD160 7b827d6d1cb40f10bb25e0dedf8791884bd60bb5 SHA1 f1c47e70898c8480ce25e5ec6c90308c45cb77f7 SHA256 877141058a3662aa6c065003a048908eb5459206dd7d4cd68d46ba51bfd448a8 -AUX gst-0.10.27-0010-v4l2-prefer-NV12.patch 955 RMD160 1f8da679aa6562a8b7838a301dc98767f543ee12 SHA1 0fe801306c6dad176ef78f4269ecf99f6b270cb5 SHA256 2ddf29274b7f7d8b1ac1f2ed68c56485dddb000e82d12288e50b0acc12ffb0ec -AUX gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch 1938 RMD160 edb01fb57a548a6a6af67f016eea16d47337d0e0 SHA1 c80bbe19a4f6ad44967d077e4ee109094b5061bd SHA256 ad26b737d21721882a6c0de9011ac30984450b4ba213dc5045e9dfff9d2180fc -AUX gst-0.10.27-0099-v4l2sink-Define-rotation-if-kernel-header-doesnt.patch 851 RMD160 547630bebcffaa01a08415f544b05e7bd5131541 SHA1 d98f5524e9da8a54b338d5f97c46036996a47431 SHA256 6f3efdcdbaeb633d240473c192b487166bc56aaad9e49b6b1269a64aef50437f -DIST gst-plugins-good-0.10.27.tar.bz2 3096221 RMD160 6486fca87a6394577ab1f0a4e94a19b1c3e2ca5e SHA1 49964ad3b8fbee9caa0b3fc437dd9169aafad79d SHA256 a9d801c3d42b456a6ebc0b95f68c44f153f756ec0fbd4877197c469cc67771fa -EBUILD gst-plugins-v4l2-0.10.27_p20110127.ebuild 1433 RMD160 3bdbf19a55231ee506b86e81e32715e0d1866ccc SHA1 680039bb2a9ddacf9e718c4e3a4adc797158e310 SHA256 cae04719e242406fb8744765010cef913afee37621259deef63e8d3f8973a51c diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch deleted file mode 100644 index f2d85ef..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 194aa8513c02fbfcabf04b45ff4c81bf8a94527f Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Tue, 14 Sep 2010 07:42:50 -0500 -Subject: [PATCH 01/11] v4l2: fix handling of RGB32/BGR32 formats - -bpp is 32, but depth is only 24.. ---- - sys/v4l2/gstv4l2object.c | 12 +++++++----- - 1 files changed, 7 insertions(+), 5 deletions(-) - -diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c -index 7e15489..f5672b5 100644 ---- a/sys/v4l2/gstv4l2object.c -+++ b/sys/v4l2/gstv4l2object.c -@@ -1132,14 +1132,16 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) - b_mask = 0xff0000; - break; - case V4L2_PIX_FMT_RGB32: -- bpp = depth = 32; -+ depth = 24; -+ bpp = 32; - endianness = G_BIG_ENDIAN; - r_mask = 0xff000000; - g_mask = 0x00ff0000; - b_mask = 0x0000ff00; - break; - case V4L2_PIX_FMT_BGR32: -- bpp = depth = 32; -+ depth = 24; -+ bpp = 32; - endianness = G_BIG_ENDIAN; - r_mask = 0x000000ff; - g_mask = 0x0000ff00; -@@ -1404,13 +1406,13 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - #endif - } - } else if (!strcmp (mimetype, "video/x-raw-rgb")) { -- gint depth, endianness, r_mask; -+ gint bpp, endianness, r_mask; - -- gst_structure_get_int (structure, "depth", &depth); -+ gst_structure_get_int (structure, "bpp", &bpp); - gst_structure_get_int (structure, "endianness", &endianness); - gst_structure_get_int (structure, "red_mask", &r_mask); - -- switch (depth) { -+ switch (bpp) { - case 8: - fourcc = V4L2_PIX_FMT_RGB332; - break; --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch deleted file mode 100644 index 11b777c..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch +++ /dev/null @@ -1,128 +0,0 @@ -From d43a9444fc5f7655a8acd2978039667a04222ba0 Mon Sep 17 00:00:00 2001 -From: Kiran Nataraju <knataraju@ti.com> -Date: Fri, 27 Aug 2010 09:00:57 +0200 -Subject: [PATCH 02/11] v4l2sink: Add rotation support. - -Signed-off-by: Kiran Nataraju <knataraju@ti.com> -Signed-off-by: Daniel Diaz <ddiaz@ti.com> ---- - sys/v4l2/gstv4l2sink.c | 34 ++++++++++++++++++++++++++++++++++ - sys/v4l2/gstv4l2sink.h | 1 + - 2 files changed, 35 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index aa6785c..5abf915 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -72,6 +72,10 @@ GST_DEBUG_CATEGORY (v4l2sink_debug); - #define PROP_DEF_MIN_QUEUED_BUFS 1 - #define DEFAULT_PROP_DEVICE "/dev/video1" - -+#define MIN_ROTATION_ANGLE 0 -+#define MAX_ROTATION_ANGLE 360 -+#define DEFAULT_ROTATION_ANGLE 0 -+ - enum - { - PROP_0, -@@ -86,6 +90,7 @@ enum - PROP_CROP_LEFT, - PROP_CROP_WIDTH, - PROP_CROP_HEIGHT, -+ PROP_ROTATION, - }; - - -@@ -220,6 +225,7 @@ static GstFlowReturn gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); - static GstFlowReturn gst_v4l2sink_show_frame (GstBaseSink * bsink, - GstBuffer * buf); -+static void gst_v4l2sink_set_rotation (GstV4l2Sink * v4l2sink); - - static void - gst_v4l2sink_base_init (gpointer g_class) -@@ -306,6 +312,11 @@ gst_v4l2sink_class_init (GstV4l2SinkClass * klass) - "The height of the video crop; default is equal to negotiated image height", - 0, 0xffffffff, 0, G_PARAM_READWRITE)); - -+ g_object_class_install_property (gobject_class, PROP_ROTATION, -+ g_param_spec_int ("rotation", "Rotation angle", -+ "Rotation angle for the image", MIN_ROTATION_ANGLE, -+ MAX_ROTATION_ANGLE, DEFAULT_ROTATION_ANGLE, G_PARAM_READWRITE)); -+ - basesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_get_caps); - basesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_set_caps); - basesink_class->buffer_alloc = GST_DEBUG_FUNCPTR (gst_v4l2sink_buffer_alloc); -@@ -336,6 +347,7 @@ gst_v4l2sink_init (GstV4l2Sink * v4l2sink, GstV4l2SinkClass * klass) - v4l2sink->overlay_fields_set = 0; - v4l2sink->crop_fields_set = 0; - v4l2sink->state = 0; -+ v4l2sink->rotation = 0; - } - - -@@ -475,6 +487,20 @@ gst_v4l2sink_sync_crop_fields (GstV4l2Sink * v4l2sink) - } - } - -+static void -+gst_v4l2sink_set_rotation (GstV4l2Sink * v4l2sink) -+{ -+ if (GST_V4L2_IS_OPEN (v4l2sink->v4l2object)) { -+ struct v4l2_control control; -+ gint fd = v4l2sink->v4l2object->video_fd; -+ -+ memset (&control, 0x00, sizeof (struct v4l2_control)); -+ control.id = V4L2_CID_ROTATE; -+ control.value = v4l2sink->rotation; -+ g_return_if_fail (v4l2_ioctl (fd, VIDIOC_S_CTRL, &control) >= 0); -+ } -+} -+ - - static void - gst_v4l2sink_set_property (GObject * object, -@@ -531,6 +557,10 @@ gst_v4l2sink_set_property (GObject * object, - v4l2sink->crop_fields_set |= RECT_HEIGHT_SET; - gst_v4l2sink_sync_crop_fields (v4l2sink); - break; -+ case PROP_ROTATION: -+ v4l2sink->rotation = g_value_get_int (value); -+ gst_v4l2sink_set_rotation (v4l2sink); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -578,6 +608,9 @@ gst_v4l2sink_get_property (GObject * object, - case PROP_CROP_HEIGHT: - g_value_set_uint (value, v4l2sink->crop.height); - break; -+ case PROP_ROTATION: -+ g_value_set_int (value, v4l2sink->rotation); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -600,6 +633,7 @@ gst_v4l2sink_change_state (GstElement * element, GstStateChange transition) - /* open the device */ - if (!gst_v4l2_object_start (v4l2sink->v4l2object)) - return GST_STATE_CHANGE_FAILURE; -+ gst_v4l2sink_set_rotation (v4l2sink); - break; - default: - break; -diff --git a/sys/v4l2/gstv4l2sink.h b/sys/v4l2/gstv4l2sink.h -index 8fe8222..1239621 100644 ---- a/sys/v4l2/gstv4l2sink.h -+++ b/sys/v4l2/gstv4l2sink.h -@@ -75,6 +75,7 @@ struct _GstV4l2Sink { - guint8 overlay_fields_set, crop_fields_set; - - guint8 state; -+ gint rotation; - }; - - struct _GstV4l2SinkClass { --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0003-v4l2sink-Add-flip-property.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0003-v4l2sink-Add-flip-property.patch deleted file mode 100644 index 9bdfa51..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0003-v4l2sink-Add-flip-property.patch +++ /dev/null @@ -1,187 +0,0 @@ -From 1381c64fd606d8ab7169eef52386139a4848c439 Mon Sep 17 00:00:00 2001 -From: Kiran Nataraju <knataraju@ti.com> -Date: Tue, 21 Sep 2010 06:21:23 +0200 -Subject: [PATCH 03/11] v4l2sink: Add flip property. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: Kiran Nataraju <knataraju@ti.com> -Signed-off-by: Daniel Díaz <yosoy@danieldiaz.org> ---- - sys/v4l2/gstv4l2sink.c | 88 +++++++++++++++++++++++++++++++++++++++++++++-- - sys/v4l2/gstv4l2sink.h | 1 + - 2 files changed, 85 insertions(+), 4 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 5abf915..6163747 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -91,6 +91,7 @@ enum - PROP_CROP_WIDTH, - PROP_CROP_HEIGHT, - PROP_ROTATION, -+ PROP_FLIP, - }; - - -@@ -129,6 +130,34 @@ gst_v4l2sink_iface_supported (GstImplementsInterface * iface, GType iface_type) - return TRUE; - } - -+/* -+ * Flip state -+ */ -+enum -+{ -+ FLIP_NONE = 0, -+ FLIP_HORIZONTAL = 1, -+ FLIP_VERTICAL = 2, -+}; -+ -+#define GST_TYPE_V4L2_FLIP (gst_v4l2_flip_get_type ()) -+static GType -+gst_v4l2_flip_get_type (void) -+{ -+ static GType type = 0; -+ -+ if (!type) { -+ static GEnumValue vals[] = { -+ {FLIP_NONE, "No Flip", "none"}, -+ {FLIP_HORIZONTAL, "Horizontal Flip", "horiz"}, -+ {FLIP_VERTICAL, "Vertical Flip", "vert"}, -+ {0, NULL, NULL}, -+ }; -+ type = g_enum_register_static ("GstV4l2SinkFlip", vals); -+ } -+ return type; -+} -+ - static void - gst_v4l2sink_interface_init (GstImplementsInterfaceClass * klass) - { -@@ -225,7 +254,7 @@ static GstFlowReturn gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); - static GstFlowReturn gst_v4l2sink_show_frame (GstBaseSink * bsink, - GstBuffer * buf); --static void gst_v4l2sink_set_rotation (GstV4l2Sink * v4l2sink); -+static void gst_v4l2sink_sync_rotation (GstV4l2Sink * v4l2sink); - - static void - gst_v4l2sink_base_init (gpointer g_class) -@@ -317,6 +346,11 @@ gst_v4l2sink_class_init (GstV4l2SinkClass * klass) - "Rotation angle for the image", MIN_ROTATION_ANGLE, - MAX_ROTATION_ANGLE, DEFAULT_ROTATION_ANGLE, G_PARAM_READWRITE)); - -+ g_object_class_install_property (gobject_class, PROP_FLIP, -+ g_param_spec_enum ("flip", "Flip State", -+ "Flip horizontal/vertical", -+ GST_TYPE_V4L2_FLIP, FLIP_NONE, G_PARAM_READWRITE)); -+ - basesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_get_caps); - basesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_set_caps); - basesink_class->buffer_alloc = GST_DEBUG_FUNCPTR (gst_v4l2sink_buffer_alloc); -@@ -348,8 +382,46 @@ gst_v4l2sink_init (GstV4l2Sink * v4l2sink, GstV4l2SinkClass * klass) - v4l2sink->crop_fields_set = 0; - v4l2sink->state = 0; - v4l2sink->rotation = 0; -+ v4l2sink->flip = FLIP_NONE; - } - -+static void -+gst_v4l2sink_sync_flip (GstV4l2Sink * v4l2sink) -+{ -+ if (GST_V4L2_IS_OPEN (v4l2sink->v4l2object)) { -+ struct v4l2_control control; -+ gint fd = v4l2sink->v4l2object->video_fd; -+ -+ memset (&control, 0x00, sizeof (struct v4l2_control)); -+ -+ switch (v4l2sink->flip) { -+ case FLIP_VERTICAL: -+ v4l2sink->rotation = 0; -+ control.value = 1; -+ break; -+ case FLIP_HORIZONTAL: -+ /* Horizontal Flip = Vertical Flip + 180 rotation */ -+ v4l2sink->rotation = 180; -+ control.value = 1; -+ break; -+ case FLIP_NONE: -+ /* In the below switch case logic we need to handle FLIP_NONE -+ * case since the v4l2 driver holds on to the last configured -+ * flip value even after the device file is closed. -+ */ -+ control.value = 0; -+ break; -+ default: -+ GST_WARNING_OBJECT (v4l2sink, "Invalid flip property"); -+ control.value = 0; -+ break; -+ } -+ -+ gst_v4l2sink_sync_rotation (v4l2sink); -+ control.id = V4L2_CID_VFLIP; -+ g_return_if_fail (v4l2_ioctl (fd, VIDIOC_S_CTRL, &control) >= 0); -+ } -+} - - static void - gst_v4l2sink_dispose (GObject * object) -@@ -488,7 +560,7 @@ gst_v4l2sink_sync_crop_fields (GstV4l2Sink * v4l2sink) - } - - static void --gst_v4l2sink_set_rotation (GstV4l2Sink * v4l2sink) -+gst_v4l2sink_sync_rotation (GstV4l2Sink * v4l2sink) - { - if (GST_V4L2_IS_OPEN (v4l2sink->v4l2object)) { - struct v4l2_control control; -@@ -559,7 +631,11 @@ gst_v4l2sink_set_property (GObject * object, - break; - case PROP_ROTATION: - v4l2sink->rotation = g_value_get_int (value); -- gst_v4l2sink_set_rotation (v4l2sink); -+ gst_v4l2sink_sync_rotation (v4l2sink); -+ break; -+ case PROP_FLIP: -+ v4l2sink->flip = g_value_get_enum (value); -+ gst_v4l2sink_sync_flip (v4l2sink); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -@@ -611,6 +687,9 @@ gst_v4l2sink_get_property (GObject * object, - case PROP_ROTATION: - g_value_set_int (value, v4l2sink->rotation); - break; -+ case PROP_FLIP: -+ g_value_set_enum (value, v4l2sink->flip); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -633,7 +712,8 @@ gst_v4l2sink_change_state (GstElement * element, GstStateChange transition) - /* open the device */ - if (!gst_v4l2_object_start (v4l2sink->v4l2object)) - return GST_STATE_CHANGE_FAILURE; -- gst_v4l2sink_set_rotation (v4l2sink); -+ gst_v4l2sink_sync_rotation (v4l2sink); -+ gst_v4l2sink_sync_flip (v4l2sink); - break; - default: - break; -diff --git a/sys/v4l2/gstv4l2sink.h b/sys/v4l2/gstv4l2sink.h -index 1239621..907973a 100644 ---- a/sys/v4l2/gstv4l2sink.h -+++ b/sys/v4l2/gstv4l2sink.h -@@ -76,6 +76,7 @@ struct _GstV4l2Sink { - - guint8 state; - gint rotation; -+ gint flip; - }; - - struct _GstV4l2SinkClass { --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch deleted file mode 100644 index 38601f8..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 39de525898eea073c1f2486b99b56ef25b6df289 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Sun, 4 Apr 2010 06:46:21 -0500 -Subject: [PATCH 04/11] v4l2sink: Add support for omap24xxvout driver - ---- - sys/v4l2/gstv4l2sink.c | 22 +++++++++++++++++++++- - 1 files changed, 21 insertions(+), 1 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 6163747..4408428 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -888,6 +888,18 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - /* initialize the buffer pool if not initialized yet (first buffer): */ - if (G_UNLIKELY (!v4l2sink->pool)) { - -+ gboolean no_pending_streamon = FALSE; -+ char *driver = (char *) v4l2sink->v4l2object->vcap.driver; -+ -+ /* the omap24xxvout driver wants us to start streaming before we -+ * queue the first buffer: -+ */ -+ if (!strcmp ("omap24xxvout", driver)) { -+ GST_DEBUG_OBJECT (v4l2sink, -+ "enabling no_pending_streamon hack for omap24xxvout driver"); -+ no_pending_streamon = TRUE; -+ } -+ - /* set_caps() might not be called yet.. so just to make sure: */ - if (!gst_v4l2sink_set_caps (bsink, caps)) { - return GST_FLOW_ERROR; -@@ -909,7 +921,14 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - gst_v4l2_xoverlay_prepare_xwindow_id (v4l2sink->v4l2object, TRUE); - #endif - -- v4l2sink->state = STATE_PENDING_STREAMON; -+ if (no_pending_streamon) { -+ if (!gst_v4l2_object_start_streaming (v4l2sink->v4l2object)) { -+ return GST_FLOW_ERROR; -+ } -+ v4l2sink->state = STATE_STREAMING; -+ } else { -+ v4l2sink->state = STATE_PENDING_STREAMON; -+ } - - GST_INFO_OBJECT (v4l2sink, "outputting buffers via mmap()"); - -@@ -996,6 +1015,7 @@ gst_v4l2sink_show_frame (GstBaseSink * bsink, GstBuffer * buf) - if (!gst_v4l2_buffer_pool_qbuf (v4l2sink->pool, GST_V4L2_BUFFER (buf))) { - return GST_FLOW_ERROR; - } -+ - if (v4l2sink->state == STATE_PENDING_STREAMON) { - if (!gst_v4l2_object_start_streaming (v4l2sink->v4l2object)) { - return GST_FLOW_ERROR; --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch deleted file mode 100644 index 04b67bc..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 1fabe36f40e872942c80041225bdbf41db561bea Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Sun, 4 Apr 2010 06:47:55 -0500 -Subject: [PATCH 05/11] v4l2sink: Add support for omap_vout driver - ---- - sys/v4l2/gstv4l2sink.c | 11 +++++++++++ - 1 files changed, 11 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 4408428..66dda8e 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -900,6 +900,17 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - no_pending_streamon = TRUE; - } - -+ /* workaround for bug in omap_vout driver, when we ask for more -+ * than four buffers: -+ */ -+ if (!strcmp ("omap_vout", driver)) { -+ if (v4l2sink->num_buffers > 4) { -+ v4l2sink->num_buffers = 4; -+ GST_DEBUG_OBJECT (v4l2sink, -+ "limiting to 4 buffers to work-around omap_vout driver bug"); -+ } -+ } -+ - /* set_caps() might not be called yet.. so just to make sure: */ - if (!gst_v4l2sink_set_caps (bsink, caps)) { - return GST_FLOW_ERROR; --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch deleted file mode 100644 index 8f5a21c..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 14d6f0fac0875981c418ac6577d23eafb5ff3f01 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Wed, 14 Apr 2010 03:29:20 -0500 -Subject: [PATCH 06/11] v4l2: increase v4l2sink element rank - -Increase rank so that it is autoplugged. ---- - sys/v4l2/gstv4l2.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/sys/v4l2/gstv4l2.c b/sys/v4l2/gstv4l2.c -index 4a7056f..cba4157 100644 ---- a/sys/v4l2/gstv4l2.c -+++ b/sys/v4l2/gstv4l2.c -@@ -55,7 +55,7 @@ plugin_init (GstPlugin * plugin) - if (!gst_element_register (plugin, "v4l2src", GST_RANK_PRIMARY, - GST_TYPE_V4L2SRC) || - #ifdef HAVE_EXPERIMENTAL -- !gst_element_register (plugin, "v4l2sink", GST_RANK_NONE, -+ !gst_element_register (plugin, "v4l2sink", GST_RANK_PRIMARY, - GST_TYPE_V4L2SINK) || - #endif - /* !gst_element_register (plugin, "v4l2jpegsrc", */ --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch deleted file mode 100644 index 345f9df..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 15c17ea368079fd5de19868af6d9ffad1cb09f3a Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Wed, 19 May 2010 17:33:46 -0500 -Subject: [PATCH 07/11] use GstQueryBuffers to get buffer requirements - ---- - sys/v4l2/gstv4l2sink.c | 40 ++++++++++++++++++++++++++++++++++++++++ - sys/v4l2/gstv4l2sink.h | 1 + - 2 files changed, 41 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 66dda8e..12323f7 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -373,6 +373,7 @@ gst_v4l2sink_init (GstV4l2Sink * v4l2sink, GstV4l2SinkClass * klass) - - /* number of buffers requested */ - v4l2sink->num_buffers = PROP_DEF_QUEUE_SIZE; -+ v4l2sink->num_buffers_can_change = TRUE; - v4l2sink->min_queued_bufs = PROP_DEF_MIN_QUEUED_BUFS; - - v4l2sink->probed_caps = NULL; -@@ -808,6 +809,7 @@ static gboolean - gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - { - GstV4l2Sink *v4l2sink = GST_V4L2SINK (bsink); -+ GstQuery *query; - gint w = 0, h = 0; - gboolean interlaced; - struct v4l2_fmtdesc *format; -@@ -855,6 +857,39 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - return FALSE; - } - -+ /* query to find if anyone upstream using these buffers has any -+ * minimum requirements: -+ */ -+ query = gst_query_new_buffers (caps); -+ if (gst_element_query (GST_ELEMENT (v4l2sink), query)) { -+ gint min_buffers, min_width, min_height; -+ -+ gst_query_parse_buffers_count (query, &min_buffers); -+ -+ /* XXX need to account for some buffers used by queue, etc.. probably -+ * queue should handle query, pass on to sink pad, and then add some -+ * number of buffers to the min, so this value is dynamic depending -+ * on the pipeline? -+ */ -+ if (min_buffers != -1) { -+ min_buffers += 3 + v4l2sink->min_queued_bufs; -+ } -+ -+ if (min_buffers > v4l2sink->num_buffers) { -+ v4l2sink->num_buffers_can_change = FALSE; -+ v4l2sink->num_buffers = min_buffers; -+ } -+ -+ gst_query_parse_buffers_dimensions (query, &min_width, &min_height); -+ if (min_width > w) { -+ w = min_width; -+ } -+ if (min_height > h) { -+ h = min_height; -+ } -+ } -+ gst_query_unref (query); -+ - if (!gst_v4l2_object_set_format (v4l2sink->v4l2object, format->pixelformat, - w, h, interlaced)) { - /* error already posted */ -@@ -944,6 +979,11 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - GST_INFO_OBJECT (v4l2sink, "outputting buffers via mmap()"); - - if (v4l2sink->num_buffers != v4l2sink->pool->buffer_count) { -+ if (!v4l2sink->num_buffers_can_change) { -+ GST_WARNING_OBJECT (v4l2sink, -+ "I can't handle a differing number of buffers!!!!"); -+ return GST_FLOW_ERROR; -+ } - v4l2sink->num_buffers = v4l2sink->pool->buffer_count; - g_object_notify (G_OBJECT (v4l2sink), "queue-size"); - } -diff --git a/sys/v4l2/gstv4l2sink.h b/sys/v4l2/gstv4l2sink.h -index 907973a..7649fa1 100644 ---- a/sys/v4l2/gstv4l2sink.h -+++ b/sys/v4l2/gstv4l2sink.h -@@ -58,6 +58,7 @@ struct _GstV4l2Sink { - GstCaps *current_caps; /* the current negotiated caps */ - GstV4l2BufferPool *pool; - guint32 num_buffers; -+ gboolean num_buffers_can_change; - guint32 min_queued_bufs; - - gint video_width, video_height; /* original (unscaled) video w/h */ --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0008-add-rowstride-support.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0008-add-rowstride-support.patch deleted file mode 100644 index f4ff893..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0008-add-rowstride-support.patch +++ /dev/null @@ -1,572 +0,0 @@ -From a86d0326df31103c2ee38ee1e0c62802a758ef13 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Fri, 21 May 2010 15:21:32 -0500 -Subject: [PATCH 08/11] add rowstride support - ---- - sys/v4l2/gstv4l2object.c | 141 +++++++++++++++++++++++++++++++++++++--------- - sys/v4l2/gstv4l2object.h | 6 +- - sys/v4l2/gstv4l2sink.c | 61 +++++++++++++------- - sys/v4l2/gstv4l2src.c | 28 +++++---- - 4 files changed, 174 insertions(+), 62 deletions(-) - -diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c -index f5672b5..5e34456 100644 ---- a/sys/v4l2/gstv4l2object.c -+++ b/sys/v4l2/gstv4l2object.c -@@ -1064,16 +1064,23 @@ gst_v4l2_object_get_format_list (GstV4l2Object * v4l2object) - return v4l2object->formats; - } - -- --GstStructure * --gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) -+/* -+ * gst_v4l2_object_v4l2fourcc_to_structures: -+ * @fourcc: requested format -+ * @structures: an array of at least MAX_STRUCTS_PER_FOURCC to return the -+ * results in -+ * -+ * Returns the number of structures returned via structures -+ */ -+gint -+gst_v4l2_object_v4l2fourcc_to_structures (guint32 fourcc, -+ GstStructure ** structures) - { -- GstStructure *structure = NULL; -- -+ gint count = 0; - switch (fourcc) { - case V4L2_PIX_FMT_MJPEG: /* Motion-JPEG */ - case V4L2_PIX_FMT_JPEG: /* JFIF JPEG */ -- structure = gst_structure_new ("image/jpeg", NULL); -+ structures[count++] = gst_structure_new ("image/jpeg", NULL); - break; - case V4L2_PIX_FMT_RGB332: - case V4L2_PIX_FMT_RGB555: -@@ -1151,17 +1158,25 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) - g_assert_not_reached (); - break; - } -- structure = gst_structure_new ("video/x-raw-rgb", -+ structures[count++] = gst_structure_new ("video/x-raw-rgb", - "bpp", G_TYPE_INT, bpp, - "depth", G_TYPE_INT, depth, - "red_mask", G_TYPE_INT, r_mask, - "green_mask", G_TYPE_INT, g_mask, - "blue_mask", G_TYPE_INT, b_mask, - "endianness", G_TYPE_INT, endianness, NULL); -+ structures[count++] = gst_structure_new ("video/x-raw-rgb-strided", -+ "bpp", G_TYPE_INT, bpp, -+ "depth", G_TYPE_INT, depth, -+ "red_mask", G_TYPE_INT, r_mask, -+ "green_mask", G_TYPE_INT, g_mask, -+ "blue_mask", G_TYPE_INT, b_mask, -+ "endianness", G_TYPE_INT, endianness, -+ "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); - break; - } - case V4L2_PIX_FMT_GREY: /* 8 Greyscale */ -- structure = gst_structure_new ("video/x-raw-gray", -+ structures[count++] = gst_structure_new ("video/x-raw-gray", - "bpp", G_TYPE_INT, 8, NULL); - break; - case V4L2_PIX_FMT_YYUV: /* 16 YUV 4:2:2 */ -@@ -1227,38 +1242,41 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) - g_assert_not_reached (); - break; - } -- structure = gst_structure_new ("video/x-raw-yuv", -+ structures[count++] = gst_structure_new ("video/x-raw-yuv", - "format", GST_TYPE_FOURCC, fcc, NULL); -+ structures[count++] = gst_structure_new ("video/x-raw-yuv-strided", -+ "format", GST_TYPE_FOURCC, fcc, -+ "rowstride", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); - break; - } - case V4L2_PIX_FMT_DV: -- structure = -+ structures[count++] = - gst_structure_new ("video/x-dv", "systemstream", G_TYPE_BOOLEAN, TRUE, - NULL); - break; - case V4L2_PIX_FMT_MPEG: /* MPEG */ -- structure = gst_structure_new ("video/mpegts", NULL); -+ structures[count++] = gst_structure_new ("video/mpegts", NULL); - break; - case V4L2_PIX_FMT_WNVA: /* Winnov hw compres */ - break; - #ifdef V4L2_PIX_FMT_SBGGR8 - case V4L2_PIX_FMT_SBGGR8: -- structure = gst_structure_new ("video/x-raw-bayer", NULL); -+ structures[count++] = gst_structure_new ("video/x-raw-bayer", NULL); - break; - #endif - #ifdef V4L2_PIX_FMT_SN9C10X - case V4L2_PIX_FMT_SN9C10X: -- structure = gst_structure_new ("video/x-sonix", NULL); -+ structures[count++] = gst_structure_new ("video/x-sonix", NULL); - break; - #endif - #ifdef V4L2_PIX_FMT_PWC1 - case V4L2_PIX_FMT_PWC1: -- structure = gst_structure_new ("video/x-pwc1", NULL); -+ structures[count++] = gst_structure_new ("video/x-pwc1", NULL); - break; - #endif - #ifdef V4L2_PIX_FMT_PWC2 - case V4L2_PIX_FMT_PWC2: -- structure = gst_structure_new ("video/x-pwc2", NULL); -+ structures[count++] = gst_structure_new ("video/x-pwc2", NULL); - break; - #endif - default: -@@ -1267,7 +1285,7 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc) - break; - } - -- return structure; -+ return count; - } - - -@@ -1278,22 +1296,23 @@ gst_v4l2_object_get_all_caps (void) - static GstCaps *caps = NULL; - - if (caps == NULL) { -- GstStructure *structure; -- - guint i; - - caps = gst_caps_new_empty (); - for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) { -- structure = -- gst_v4l2_object_v4l2fourcc_to_structure (gst_v4l2_formats[i].format); -- if (structure) { -+ GstStructure *structures[MAX_STRUCTS_PER_FOURCC]; -+ gint count, j; -+ count = -+ gst_v4l2_object_v4l2fourcc_to_structures (gst_v4l2_formats[i].format, -+ structures); -+ for (j = 0; j < count; j++) { - if (gst_v4l2_formats[i].dimensions) { -- gst_structure_set (structure, -+ gst_structure_set (structures[j], - "width", GST_TYPE_INT_RANGE, 1, GST_V4L2_MAX_SIZE, - "height", GST_TYPE_INT_RANGE, 1, GST_V4L2_MAX_SIZE, - "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 100, 1, NULL); - } -- gst_caps_append_structure (caps, structure); -+ gst_caps_append_structure (caps, structures[j]); - } - } - } -@@ -1306,12 +1325,14 @@ gst_v4l2_object_get_all_caps (void) - * @caps: given input caps - * @format: location for the v4l format - * @w/@h: location for width and height -+ * @rs: required rowstride in bytes, or 0 if natural stride (based on format -+ * and width) or not-applicable - * @fps_n/@fps_d: location for framerate - * @size: location for expected size of the frame or 0 if unknown - */ - gboolean - gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, -- struct v4l2_fmtdesc ** format, gint * w, gint * h, -+ struct v4l2_fmtdesc ** format, gint * w, gint * h, gint * rs, - gboolean * interlaced, guint * fps_n, guint * fps_d, guint * size) - { - GstStructure *structure; -@@ -1319,10 +1340,12 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - guint32 fourcc; - const gchar *mimetype; - guint outsize; -+ struct v4l2_format fmt = { 0, }; - - /* default unknown values */ - fourcc = 0; - outsize = 0; -+ *rs = 0; - - structure = gst_caps_get_structure (caps, 0); - -@@ -1351,61 +1374,73 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - *fps_n = gst_value_get_fraction_numerator (framerate); - *fps_d = gst_value_get_fraction_denominator (framerate); - -- if (!strcmp (mimetype, "video/x-raw-yuv")) { -+ if (!strcmp (mimetype, "video/x-raw-yuv") || -+ !strcmp (mimetype, "video/x-raw-yuv-strided")) { - gst_structure_get_fourcc (structure, "format", &fourcc); - - switch (fourcc) { - case GST_MAKE_FOURCC ('I', '4', '2', '0'): - case GST_MAKE_FOURCC ('I', 'Y', 'U', 'V'): - fourcc = V4L2_PIX_FMT_YUV420; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * GST_ROUND_UP_2 (*h); - outsize += 2 * ((GST_ROUND_UP_8 (*w) / 2) * (GST_ROUND_UP_2 (*h) / 2)); - break; - case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'): - fourcc = V4L2_PIX_FMT_YUYV; -+ *rs = GST_ROUND_UP_2 (*w) * 2; - outsize = (GST_ROUND_UP_2 (*w) * 2) * *h; - break; - case GST_MAKE_FOURCC ('Y', '4', '1', 'P'): - fourcc = V4L2_PIX_FMT_Y41P; -+ *rs = GST_ROUND_UP_2 (*w) * 2; - outsize = (GST_ROUND_UP_2 (*w) * 2) * *h; - break; - case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'): - fourcc = V4L2_PIX_FMT_UYVY; -+ *rs = GST_ROUND_UP_2 (*w) * 2; - outsize = (GST_ROUND_UP_2 (*w) * 2) * *h; - break; - case GST_MAKE_FOURCC ('Y', 'V', '1', '2'): - fourcc = V4L2_PIX_FMT_YVU420; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * GST_ROUND_UP_2 (*h); - outsize += 2 * ((GST_ROUND_UP_8 (*w) / 2) * (GST_ROUND_UP_2 (*h) / 2)); - break; - case GST_MAKE_FOURCC ('Y', '4', '1', 'B'): - fourcc = V4L2_PIX_FMT_YUV411P; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * *h; - outsize += 2 * ((GST_ROUND_UP_8 (*w) / 4) * *h); - break; - case GST_MAKE_FOURCC ('Y', '4', '2', 'B'): - fourcc = V4L2_PIX_FMT_YUV422P; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * *h; - outsize += 2 * ((GST_ROUND_UP_8 (*w) / 2) * *h); - break; - case GST_MAKE_FOURCC ('N', 'V', '1', '2'): - fourcc = V4L2_PIX_FMT_NV12; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * GST_ROUND_UP_2 (*h); - outsize += (GST_ROUND_UP_4 (*w) * *h) / 2; - break; - case GST_MAKE_FOURCC ('N', 'V', '2', '1'): - fourcc = V4L2_PIX_FMT_NV21; -+ *rs = GST_ROUND_UP_4 (*w); - outsize = GST_ROUND_UP_4 (*w) * GST_ROUND_UP_2 (*h); - outsize += (GST_ROUND_UP_4 (*w) * *h) / 2; - break; - #ifdef V4L2_PIX_FMT_YVYU - case GST_MAKE_FOURCC ('Y', 'V', 'Y', 'U'): - fourcc = V4L2_PIX_FMT_YVYU; -+ *rs = GST_ROUND_UP_2 (*w) * 2; - outsize = (GST_ROUND_UP_2 (*w) * 2) * *h; - break; - #endif - } -- } else if (!strcmp (mimetype, "video/x-raw-rgb")) { -+ } else if (!strcmp (mimetype, "video/x-raw-rgb") || -+ !strcmp (mimetype, "video/x-raw-rgb-strided")) { - gint bpp, endianness, r_mask; - - gst_structure_get_int (structure, "bpp", &bpp); -@@ -1415,20 +1450,25 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - switch (bpp) { - case 8: - fourcc = V4L2_PIX_FMT_RGB332; -+ *rs = *w; - break; - case 15: - fourcc = (endianness == G_LITTLE_ENDIAN) ? - V4L2_PIX_FMT_RGB555 : V4L2_PIX_FMT_RGB555X; -+ *rs = 2 * *w; - break; - case 16: - fourcc = (endianness == G_LITTLE_ENDIAN) ? - V4L2_PIX_FMT_RGB565 : V4L2_PIX_FMT_RGB565X; -+ *rs = 2 * *w; - break; - case 24: - fourcc = (r_mask == 0xFF) ? V4L2_PIX_FMT_BGR24 : V4L2_PIX_FMT_RGB24; -+ *rs = 3 * *w; - break; - case 32: - fourcc = (r_mask == 0xFF) ? V4L2_PIX_FMT_BGR32 : V4L2_PIX_FMT_RGB32; -+ *rs = 4 * *w; - break; - } - } else if (strcmp (mimetype, "video/x-dv") == 0) { -@@ -1458,6 +1498,25 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, - if (fourcc == 0) - return FALSE; - -+ /* check what stride the driver supports */ -+ fmt.type = v4l2object->type; -+ fmt.fmt.pix.width = *w; -+ fmt.fmt.pix.height = *h; -+ fmt.fmt.pix.pixelformat = fourcc; -+ fmt.fmt.pix.field = V4L2_FIELD_ANY; -+ fmt.fmt.pix.bytesperline = *rs; -+ if (v4l2_ioctl (v4l2object->video_fd, VIDIOC_TRY_FMT, &fmt) >= 0) { -+ if (fmt.fmt.pix.bytesperline == *rs) { -+ *rs = 0; -+ } else { -+ *rs = fmt.fmt.pix.bytesperline; -+ } -+ GST_INFO_OBJECT (v4l2object->element, "rowstride: %d", *rs); -+ } else { -+ GST_WARNING_OBJECT (v4l2object->element, -+ "VIDIOC_TRY_FMT should not fail.. driver problem?"); -+ } -+ - done: - *format = gst_v4l2_object_get_format_from_fourcc (v4l2object, fourcc); - *size = outsize; -@@ -1465,6 +1524,36 @@ done: - return TRUE; - } - -+/* Update caps to reflect rowstride that has been requested by the -+ * driver -+ */ -+GstCaps * -+gst_v4l2_object_update_rowstride (GstV4l2Object * v4l2object, -+ GstCaps * caps, gint rs) -+{ -+ GstStructure *structure; -+ const gchar *mimetype; -+ -+ caps = gst_caps_make_writable (caps); -+ -+ structure = gst_caps_get_structure (caps, 0); -+ mimetype = gst_structure_get_name (structure); -+ -+ if (!strcmp (mimetype, "video/x-raw-yuv")) { -+ mimetype = "video/x-raw-yuv-strided"; -+ gst_structure_set_name (structure, mimetype); -+ } else if (!strcmp (mimetype, "video/x-raw-rgb")) { -+ mimetype = "video/x-raw-rgb-strided"; -+ gst_structure_set_name (structure, mimetype); -+ } -+ -+ if (!strcmp (mimetype, "video/x-raw-yuv-strided") || -+ !strcmp (mimetype, "video/x-raw-rgb-strided")) { -+ gst_structure_set (structure, "rowstride", G_TYPE_INT, rs, NULL); -+ } -+ -+ return caps; -+} - - static gboolean - gst_v4l2_object_get_nearest_size (GstV4l2Object * v4l2object, -diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h -index a0dd41c..228e7c7 100644 ---- a/sys/v4l2/gstv4l2object.h -+++ b/sys/v4l2/gstv4l2object.h -@@ -179,15 +179,17 @@ GstCaps* gst_v4l2_object_probe_caps_for_format (GstV4l2Object *v4l2object, - const GstStructure * template); - - gboolean gst_v4l2_object_get_caps_info (GstV4l2Object *v4l2object, GstCaps *caps, -- struct v4l2_fmtdesc **format, gint *w, gint *h, -+ struct v4l2_fmtdesc **format, gint *w, gint *h, gint *rs, - gboolean * interlaced, guint *fps_n, guint *fps_d, guint *size); - -+GstCaps * gst_v4l2_object_update_rowstride (GstV4l2Object * v4l2object, GstCaps * caps, gint rs); - - GSList* gst_v4l2_object_get_format_list (GstV4l2Object *v4l2object); - - GstCaps* gst_v4l2_object_get_all_caps (void); - --GstStructure* gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc); -+#define MAX_STRUCTS_PER_FOURCC 2 -+gint gst_v4l2_object_v4l2fourcc_to_structures (guint32 fourcc, GstStructure ** structures); - - gboolean gst_v4l2_object_set_format (GstV4l2Object *v4l2object, guint32 pixelformat, guint32 width, guint32 height, gboolean interlaced); - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index 12323f7..a1f78cf 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -776,24 +776,23 @@ gst_v4l2sink_get_caps (GstBaseSink * bsink) - for (walk = v4l2sink->v4l2object->formats; walk; walk = walk->next) { - struct v4l2_fmtdesc *format; - -- GstStructure *template; -+ GstStructure *templates[MAX_STRUCTS_PER_FOURCC]; -+ gint count, i; - - format = (struct v4l2_fmtdesc *) walk->data; - -- template = gst_v4l2_object_v4l2fourcc_to_structure (format->pixelformat); -+ count = gst_v4l2_object_v4l2fourcc_to_structures (format->pixelformat, -+ templates); - -- if (template) { -+ for (i = 0; i < count; i++) { - GstCaps *tmp; - -- tmp = -- gst_v4l2_object_probe_caps_for_format (v4l2sink->v4l2object, -- format->pixelformat, template); -+ tmp = gst_v4l2_object_probe_caps_for_format (v4l2sink->v4l2object, -+ format->pixelformat, templates[i]); - if (tmp) - gst_caps_append (ret, tmp); - -- gst_structure_free (template); -- } else { -- GST_DEBUG_OBJECT (v4l2sink, "unknown format %u", format->pixelformat); -+ gst_structure_free (templates[i]); - } - } - -@@ -810,7 +809,7 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - { - GstV4l2Sink *v4l2sink = GST_V4L2SINK (bsink); - GstQuery *query; -- gint w = 0, h = 0; -+ gint w = 0, h = 0, rs = 0; - gboolean interlaced; - struct v4l2_fmtdesc *format; - guint fps_n, fps_d; -@@ -823,11 +822,36 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - return FALSE; - } - -+ /* we want our own v4l2 type of fourcc codes */ -+ if (!gst_v4l2_object_get_caps_info (v4l2sink->v4l2object, caps, -+ &format, &w, &h, &rs, &interlaced, &fps_n, &fps_d, &size)) { -+ GST_DEBUG_OBJECT (v4l2sink, "can't get capture format from caps %p", caps); -+ return FALSE; -+ } -+ -+ if (!format) { -+ GST_DEBUG_OBJECT (v4l2sink, "unrecognized caps!!"); -+ return FALSE; -+ } -+ -+ /* we need to make our own ref before we potentially update the -+ * caps, to avoid that we release a ref that is not owned by us -+ * when we make the caps writable -+ */ -+ caps = gst_caps_ref (caps); -+ -+ /* if necessary, update caps for rowstride */ -+ if (rs) { -+ caps = gst_v4l2_object_update_rowstride (v4l2sink->v4l2object, caps, rs); -+ GST_DEBUG_OBJECT (v4l2sink, "updated caps: %" GST_PTR_FORMAT, caps); -+ } -+ - if (v4l2sink->current_caps) { - GST_DEBUG_OBJECT (v4l2sink, "already have caps set.. are they equal?"); - LOG_CAPS (v4l2sink, v4l2sink->current_caps); - if (gst_caps_is_equal (v4l2sink->current_caps, caps)) { - GST_DEBUG_OBJECT (v4l2sink, "yes they are!"); -+ gst_caps_unref (caps); - return TRUE; - } - GST_DEBUG_OBJECT (v4l2sink, "no they aren't!"); -@@ -842,18 +866,7 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - * - */ - GST_DEBUG_OBJECT (v4l2sink, "warning, changing caps not supported yet"); -- return FALSE; -- } -- -- /* we want our own v4l2 type of fourcc codes */ -- if (!gst_v4l2_object_get_caps_info (v4l2sink->v4l2object, caps, -- &format, &w, &h, &interlaced, &fps_n, &fps_d, &size)) { -- GST_DEBUG_OBJECT (v4l2sink, "can't get capture format from caps %p", caps); -- return FALSE; -- } -- -- if (!format) { -- GST_DEBUG_OBJECT (v4l2sink, "unrecognized caps!!"); -+ gst_caps_unref (caps); - return FALSE; - } - -@@ -893,6 +906,7 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - if (!gst_v4l2_object_set_format (v4l2sink->v4l2object, format->pixelformat, - w, h, interlaced)) { - /* error already posted */ -+ gst_caps_unref (caps); - return FALSE; - } - -@@ -951,6 +965,9 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - return GST_FLOW_ERROR; - } - -+ /* caps may have changed in _set_caps() if we need rowstride */ -+ caps = v4l2sink->current_caps; -+ - GST_V4L2_CHECK_OPEN (v4l2sink->v4l2object); - - if (!(v4l2sink->pool = gst_v4l2_buffer_pool_new (GST_ELEMENT (v4l2sink), -diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c -index 4a37d35..a9a7787 100644 ---- a/sys/v4l2/gstv4l2src.c -+++ b/sys/v4l2/gstv4l2src.c -@@ -581,24 +581,23 @@ gst_v4l2src_get_caps (GstBaseSrc * src) - for (walk = v4l2src->v4l2object->formats; walk; walk = walk->next) { - struct v4l2_fmtdesc *format; - -- GstStructure *template; -+ GstStructure *templates[MAX_STRUCTS_PER_FOURCC]; -+ gint count, i; - - format = (struct v4l2_fmtdesc *) walk->data; - -- template = gst_v4l2_object_v4l2fourcc_to_structure (format->pixelformat); -+ count = gst_v4l2_object_v4l2fourcc_to_structures (format->pixelformat, -+ templates); - -- if (template) { -+ for (i = 0; i < count; i++) { - GstCaps *tmp; - -- tmp = -- gst_v4l2_object_probe_caps_for_format (v4l2src->v4l2object, -- format->pixelformat, template); -+ tmp = gst_v4l2_object_probe_caps_for_format (v4l2src->v4l2object, -+ format->pixelformat, templates[i]); - if (tmp) - gst_caps_append (ret, tmp); - -- gst_structure_free (template); -- } else { -- GST_DEBUG_OBJECT (v4l2src, "unknown format %u", format->pixelformat); -+ gst_structure_free (templates[i]); - } - } - -@@ -613,7 +612,7 @@ static gboolean - gst_v4l2src_set_caps (GstBaseSrc * src, GstCaps * caps) - { - GstV4l2Src *v4l2src; -- gint w = 0, h = 0; -+ gint w = 0, h = 0, rs = 0; - gboolean interlaced; - struct v4l2_fmtdesc *format; - guint fps_n, fps_d; -@@ -635,13 +634,18 @@ gst_v4l2src_set_caps (GstBaseSrc * src, GstCaps * caps) - } - - /* we want our own v4l2 type of fourcc codes */ -- if (!gst_v4l2_object_get_caps_info (v4l2src->v4l2object, caps, &format, &w, -- &h, &interlaced, &fps_n, &fps_d, &size)) { -+ if (!gst_v4l2_object_get_caps_info (v4l2src->v4l2object, caps, &format, -+ &w, &h, &rs, &interlaced, &fps_n, &fps_d, &size)) { - GST_INFO_OBJECT (v4l2src, - "can't get capture format from caps %" GST_PTR_FORMAT, caps); - return FALSE; - } - -+ /* if necessary, update caps for rowstride */ -+ if (rs) { -+ caps = gst_v4l2_object_update_rowstride (v4l2src->v4l2object, caps, rs); -+ } -+ - GST_DEBUG_OBJECT (v4l2src, "trying to set_capture %dx%d at %d/%d fps, " - "format %s", w, h, fps_n, fps_d, format->description); - --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch deleted file mode 100644 index c5d3197..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch +++ /dev/null @@ -1,119 +0,0 @@ -From e7497b9f0c6c88b764d8f95e01197e2a2ea0dd95 Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Tue, 25 May 2010 11:02:45 -0500 -Subject: [PATCH 09/11] use GstEventCrop to get crop info - ---- - sys/v4l2/gstv4l2sink.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++- - 1 files changed, 62 insertions(+), 1 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index a1f78cf..feafe7a 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -252,6 +252,7 @@ static GstCaps *gst_v4l2sink_get_caps (GstBaseSink * bsink); - static gboolean gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps); - static GstFlowReturn gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); -+static gboolean gst_v4l2sink_event (GstBaseSink * bsink, GstEvent * event); - static GstFlowReturn gst_v4l2sink_show_frame (GstBaseSink * bsink, - GstBuffer * buf); - static void gst_v4l2sink_sync_rotation (GstV4l2Sink * v4l2sink); -@@ -354,6 +355,7 @@ gst_v4l2sink_class_init (GstV4l2SinkClass * klass) - basesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_get_caps); - basesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_set_caps); - basesink_class->buffer_alloc = GST_DEBUG_FUNCPTR (gst_v4l2sink_buffer_alloc); -+ basesink_class->event = GST_DEBUG_FUNCPTR (gst_v4l2sink_event); - basesink_class->render = GST_DEBUG_FUNCPTR (gst_v4l2sink_show_frame); - } - -@@ -895,11 +897,22 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - - gst_query_parse_buffers_dimensions (query, &min_width, &min_height); - if (min_width > w) { -+ v4l2sink->crop.width = w; -+ v4l2sink->crop_fields_set |= RECT_WIDTH_SET; - w = min_width; - } - if (min_height > h) { -+ v4l2sink->crop.height = h; -+ v4l2sink->crop_fields_set |= RECT_HEIGHT_SET; - h = min_height; - } -+ -+ /* clear top/left crop values.. otherwise by default display will try -+ * to center, rather than scale, the image if it is too big to fit on -+ * display -+ */ -+ v4l2sink->crop.top = v4l2sink->crop.left = 0; -+ v4l2sink->crop_fields_set |= RECT_TOP_SET | RECT_LEFT_SET; - } - gst_query_unref (query); - -@@ -919,7 +932,13 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - GST_VIDEO_SINK_WIDTH (v4l2sink) = w; - GST_VIDEO_SINK_HEIGHT (v4l2sink) = h; - -- v4l2sink->current_caps = gst_caps_ref (caps); -+ /* this needs to go after gst_v4l2_object_set_format() to ensure driver -+ * has proper width/height (so we don't confuse it's error checking by -+ * setting a crop larger than the picture size) -+ */ -+ gst_v4l2sink_sync_crop_fields (v4l2sink); -+ -+ v4l2sink->current_caps = caps; - - return TRUE; - } -@@ -1023,6 +1042,48 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - } - } - -+/* called to handle events */ -+static gboolean -+gst_v4l2sink_event (GstBaseSink * bsink, GstEvent * event) -+{ -+ GstV4l2Sink *v4l2sink = GST_V4L2SINK (bsink); -+ GstEventType type = GST_EVENT_TYPE (event); -+ -+ GST_DEBUG_OBJECT (v4l2sink, "event %" GST_PTR_FORMAT, event); -+ -+ switch (type) { -+ case GST_EVENT_CROP:{ -+ gint top, left, width, height; -+ gst_event_parse_crop (event, &top, &left, &width, &height); -+ if (top >= 0) { -+ v4l2sink->crop.top = top; -+ v4l2sink->crop_fields_set |= RECT_TOP_SET; -+ } -+ if (left >= 0) { -+ v4l2sink->crop.left = left; -+ v4l2sink->crop_fields_set |= RECT_LEFT_SET; -+ } -+ if (width >= 0) { -+ v4l2sink->crop.width = width; -+ v4l2sink->crop_fields_set |= RECT_WIDTH_SET; -+ } -+ if (height >= 0) { -+ v4l2sink->crop.height = height; -+ v4l2sink->crop_fields_set |= RECT_HEIGHT_SET; -+ } -+ gst_v4l2sink_sync_crop_fields (v4l2sink); -+ return TRUE; -+ } -+ default:{ -+ if (GST_BASE_SINK_CLASS (parent_class)->event) { -+ return GST_BASE_SINK_CLASS (parent_class)->event (bsink, event); -+ } else { -+ return TRUE; -+ } -+ } -+ } -+} -+ - /* called after A/V sync to render frame */ - static GstFlowReturn - gst_v4l2sink_show_frame (GstBaseSink * bsink, GstBuffer * buf) --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0010-v4l2-prefer-NV12.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0010-v4l2-prefer-NV12.patch deleted file mode 100644 index 301056a..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0010-v4l2-prefer-NV12.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 107c18830342c69229857f968dff33071d07992d Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Tue, 14 Sep 2010 07:44:01 -0500 -Subject: [PATCH 10/11] v4l2: prefer NV12 - -All else being equal, the buffer sizes are smaller compared to a 422 format -like YUY2/UYVY.. although ideally rank would come from driver. ---- - sys/v4l2/gstv4l2object.c | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c -index 5e34456..644edcf 100644 ---- a/sys/v4l2/gstv4l2object.c -+++ b/sys/v4l2/gstv4l2object.c -@@ -886,6 +886,9 @@ gst_v4l2_object_format_get_rank (const struct v4l2_fmtdesc *fmt) - break; - - case V4L2_PIX_FMT_NV12: /* 12 Y/CbCr 4:2:0 */ -+ rank = YUV_BASE_RANK + 11; -+ break; -+ - case V4L2_PIX_FMT_NV21: /* 12 Y/CrCb 4:2:0 */ - case V4L2_PIX_FMT_YYUV: /* 16 YUV 4:2:2 */ - case V4L2_PIX_FMT_HI240: /* 8 8-bit color */ --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch deleted file mode 100644 index 3384de7..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 4e319948c62aafd5339c38d065fd8dbfa5a09ced Mon Sep 17 00:00:00 2001 -From: Rob Clark <rob@ti.com> -Date: Thu, 13 Jan 2011 09:43:08 -0600 -Subject: [PATCH 11/11] v4l2sink: fix issue seen with autoconvert - -In this scenario _set_caps() will get called earlier than _buffer_alloc() -so we need to not override the number of buffers in the case that the -upstream element answers the query about number of requested buffers. ---- - sys/v4l2/gstv4l2sink.c | 6 ++++-- - 1 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index feafe7a..ca6ae15 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -881,6 +881,8 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - - gst_query_parse_buffers_count (query, &min_buffers); - -+ GST_DEBUG_OBJECT (v4l2sink, "min_buffers=%d", min_buffers); -+ - /* XXX need to account for some buffers used by queue, etc.. probably - * queue should handle query, pass on to sink pad, and then add some - * number of buffers to the min, so this value is dynamic depending -@@ -888,10 +890,10 @@ gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - */ - if (min_buffers != -1) { - min_buffers += 3 + v4l2sink->min_queued_bufs; -+ v4l2sink->num_buffers_can_change = FALSE; - } - - if (min_buffers > v4l2sink->num_buffers) { -- v4l2sink->num_buffers_can_change = FALSE; - v4l2sink->num_buffers = min_buffers; - } - -@@ -972,7 +974,7 @@ gst_v4l2sink_buffer_alloc (GstBaseSink * bsink, guint64 offset, guint size, - * than four buffers: - */ - if (!strcmp ("omap_vout", driver)) { -- if (v4l2sink->num_buffers > 4) { -+ if (v4l2sink->num_buffers_can_change && v4l2sink->num_buffers > 4) { - v4l2sink->num_buffers = 4; - GST_DEBUG_OBJECT (v4l2sink, - "limiting to 4 buffers to work-around omap_vout driver bug"); --- -1.7.1 - diff --git a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0099-v4l2sink-Define-rotation-if-kernel-header-doesnt.patch b/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0099-v4l2sink-Define-rotation-if-kernel-header-doesnt.patch deleted file mode 100644 index 82917b8..0000000 --- a/media-plugins/gst-plugins-v4l2/files/gst-0.10.27-0099-v4l2sink-Define-rotation-if-kernel-header-doesnt.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 97e06ec24aa68f94bdd75f02d7026490c6080e96 Mon Sep 17 00:00:00 2001 -From: Daniel Diaz <ddiaz@ti.com> -Date: Fri, 28 Jan 2011 15:23:26 -0600 -Subject: [PATCH] v4l2sink: Define rotation if kernel header doesn't. - -Signed-off-by: Daniel Diaz <ddiaz@ti.com> ---- - sys/v4l2/gstv4l2sink.c | 4 ++++ - 1 files changed, 4 insertions(+), 0 deletions(-) - -diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c -index ca6ae15..0438de9 100644 ---- a/sys/v4l2/gstv4l2sink.c -+++ b/sys/v4l2/gstv4l2sink.c -@@ -102,6 +102,10 @@ GST_IMPLEMENT_V4L2_XOVERLAY_METHODS (GstV4l2Sink, gst_v4l2sink); - #endif - GST_IMPLEMENT_V4L2_VIDORIENT_METHODS (GstV4l2Sink, gst_v4l2sink); - -+#ifndef V4L2_CID_ROTATE -+# define V4L2_CID_ROTATE (V4L2_CID_BASE+34) -+#endif -+ - static gboolean - gst_v4l2sink_iface_supported (GstImplementsInterface * iface, GType iface_type) - { --- -1.7.3.4 diff --git a/media-plugins/gst-plugins-v4l2/gst-plugins-v4l2-0.10.27_p20110127.ebuild b/media-plugins/gst-plugins-v4l2/gst-plugins-v4l2-0.10.27_p20110127.ebuild deleted file mode 100644 index 7f93109..0000000 --- a/media-plugins/gst-plugins-v4l2/gst-plugins-v4l2-0.10.27_p20110127.ebuild +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -inherit gst-plugins-good - -DESCRIPION="Plug-in to allow capture from video4linux2 (V4L2) devices" -KEYWORDS="~alpha ~amd64 arm ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86" -IUSE="" - -RDEPEND=">=media-libs/gst-plugins-base-0.10.32_p20110127" -DEPEND="${RDEPEND} - virtual/os-headers" - -GST_PLUGINS_BUILD="gst_v4l2" - -src_unpack() { - unpack ${A} - cd "${S}" - epatch "${FILESDIR}"/gst-0.10.27-0001-v4l2-fix-handling-of-RGB32-BGR32-formats.patch - epatch "${FILESDIR}"/gst-0.10.27-0002-v4l2sink-Add-rotation-support.patch - epatch "${FILESDIR}"/gst-0.10.27-0003-v4l2sink-Add-flip-property.patch - epatch "${FILESDIR}"/gst-0.10.27-0004-v4l2sink-Add-support-for-omap24xxvout-driver.patch - epatch "${FILESDIR}"/gst-0.10.27-0005-v4l2sink-Add-support-for-omap_vout-driver.patch - epatch "${FILESDIR}"/gst-0.10.27-0006-v4l2-increase-v4l2sink-element-rank.patch - epatch "${FILESDIR}"/gst-0.10.27-0007-use-GstQueryBuffers-to-get-buffer-requirements.patch - epatch "${FILESDIR}"/gst-0.10.27-0008-add-rowstride-support.patch - epatch "${FILESDIR}"/gst-0.10.27-0009-use-GstEventCrop-to-get-crop-info.patch - epatch "${FILESDIR}"/gst-0.10.27-0010-v4l2-prefer-NV12.patch - epatch "${FILESDIR}"/gst-0.10.27-0011-v4l2sink-fix-issue-seen-with-autoconvert.patch - epatch "${FILESDIR}"/gst-0.10.27-0099-v4l2sink-Define-rotation-if-kernel-header-doesnt.patch -} diff --git a/net-wireless/tibtfm-wl1271-firmware/Manifest b/net-wireless/tibtfm-wl1271-firmware/Manifest deleted file mode 100644 index 0f1098e..0000000 --- a/net-wireless/tibtfm-wl1271-firmware/Manifest +++ /dev/null @@ -1,3 +0,0 @@ -DIST tibtfm-wl1271-firmware_0.24.9.2.orig.tar.gz 44187 RMD160 c3575822eca64849f892c5063f973a702a0429fe SHA1 76b6e33f11845d61360dea04770231901a29323a SHA256 12320157d91b40d3917cc48046b0ab47ef840576b0b6b899d1bc6bff1ef687f2 -EBUILD tibtfm-wl1271-firmware-0.24.9.2.ebuild 592 RMD160 c5b9ae40e0b1ecacc4b8536fa70863a0e63bed81 SHA1 7ba732cbc9e402f25a7c5d1ae8ecfe40c8c6d218 SHA256 9b99575e66c144616fd9759b2ff56c497eeacbffb7e237e6e5cc12a781b8268b -MISC metadata.xml 222 RMD160 3f50aa50f95905f1387e67bc72c80b4c1b63aab4 SHA1 b5ad6eab5a55d57fd25fa68a46d1359cc25759aa SHA256 b8f80af5f2e9d409535bd1e3981b685a013f820ec82b504d82d5c9c077cd9fa6 diff --git a/net-wireless/tibtfm-wl1271-firmware/metadata.xml b/net-wireless/tibtfm-wl1271-firmware/metadata.xml deleted file mode 100644 index f6b1086..0000000 --- a/net-wireless/tibtfm-wl1271-firmware/metadata.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> -<pkgmetadata> -<herd>no-herd</herd> -<maintainer> - <email>armin76@gentoo.org</email> -</maintainer> -</pkgmetadata> diff --git a/net-wireless/tibtfm-wl1271-firmware/tibtfm-wl1271-firmware-0.24.9.2.ebuild b/net-wireless/tibtfm-wl1271-firmware/tibtfm-wl1271-firmware-0.24.9.2.ebuild deleted file mode 100644 index 6569755..0000000 --- a/net-wireless/tibtfm-wl1271-firmware/tibtfm-wl1271-firmware-0.24.9.2.ebuild +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 1999-2007 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-wireless/zd1211-firmware/zd1211-firmware-1.4.ebuild,v 1.2 2007/11/03 12:03:19 dsd Exp $ - -DESCRIPTION="Firmware for Texas Instruments WiLinkTM solution (WL1271)" - -HOMEPAGE="https://gforge.ti.com/gf/project/wilink_drivers/" -SRC_URI="https://launchpad.net/~tiomap-dev/+archive/release/+files/${PN}_${PV}.orig.tar.gz" - - -LICENSE="TI-TSPA-v1" -SLOT="0" -KEYWORDS="arm" - -IUSE="" -DEPEND="" - - -src_install() { - insinto /lib/firmware/ - doins init_scripts/* -} diff --git a/net-wireless/tibtfm-wl1271/Manifest b/net-wireless/tibtfm-wl1271/Manifest deleted file mode 100644 index d92ac24..0000000 --- a/net-wireless/tibtfm-wl1271/Manifest +++ /dev/null @@ -1,5 +0,0 @@ -AUX tibtfm-wl1271.init 704 RMD160 2a0b45c33f6a0bca00c6f62917caa2b05981f70b SHA1 e0db3f00841a075445ffe02b759547f2b7bb7462 SHA256 c31555c50d7d2520b9a1716382e3405b3e376ac1be05311c73dd2e8ac4197377 -DIST tibtfm-wl1271_0.24.9-0ubuntu6.diff.gz 4110 RMD160 4b6a9c13c9765458cf6d65a417de0ceb48c99de4 SHA1 3be118bee561efe59af28e1164b4a99ce8aff74d SHA256 d97315e1ffe66c1fc625726aff6a18fc67183e3def28616fb819ea2466e1487b -DIST tibtfm-wl1271_0.24.9.orig.tar.gz 12032 RMD160 2c7fed1bf8d09f38f86d6443d4139713043397e3 SHA1 a28ae4d05d7730ea6d07576531059067e3374fca SHA256 9e243042c48fb2591735b0526d265f4f03af779acc8a31f6c847a45138d041b0 -EBUILD tibtfm-wl1271-0.24.9.ebuild 942 RMD160 0efa3e09faea04f1430708e6440311435c536b50 SHA1 17a75550d8864e36444268a22876513bf384416a SHA256 ba397eb8836afb8ec7c5e18a8d48dfca32dc2a2eba0926e736944342eefa571c -MISC metadata.xml 222 RMD160 3f50aa50f95905f1387e67bc72c80b4c1b63aab4 SHA1 b5ad6eab5a55d57fd25fa68a46d1359cc25759aa SHA256 b8f80af5f2e9d409535bd1e3981b685a013f820ec82b504d82d5c9c077cd9fa6 diff --git a/net-wireless/tibtfm-wl1271/files/tibtfm-wl1271.init b/net-wireless/tibtfm-wl1271/files/tibtfm-wl1271.init deleted file mode 100755 index 8975be6..0000000 --- a/net-wireless/tibtfm-wl1271/files/tibtfm-wl1271.init +++ /dev/null @@ -1,26 +0,0 @@ -#!/sbin/runscript -# Copyright 1999-2008 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-wireless/bluez/files/4.60/bluetooth-init.d,v 1.2 2010/06/11 10:14:00 pacho Exp $ - -depend() { - after coldplug - need dbus localmount -} - -start() { - ebegin "Initializing BT module of wl1271" - - start-stop-daemon --start --oknodo --background \ - --name tibtfm-wl1271 --pidfile /var/run/tibtfm-wl1271.pid --make-pidfile \ - --exec /usr/bin/uim -- /dev/ttyO1 3686400 1 22 - - eend $? -} - -stop() { - ebegin "Deinitializing BT module of wl1271" - start-stop-daemon --stop \ - --name tibtfm-wl1271 --pidfile /var/run/tibtfm-wl1271.pid - eend $? -} diff --git a/net-wireless/tibtfm-wl1271/metadata.xml b/net-wireless/tibtfm-wl1271/metadata.xml deleted file mode 100644 index f6b1086..0000000 --- a/net-wireless/tibtfm-wl1271/metadata.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> -<pkgmetadata> -<herd>no-herd</herd> -<maintainer> - <email>armin76@gentoo.org</email> -</maintainer> -</pkgmetadata> diff --git a/net-wireless/tibtfm-wl1271/tibtfm-wl1271-0.24.9.ebuild b/net-wireless/tibtfm-wl1271/tibtfm-wl1271-0.24.9.ebuild deleted file mode 100644 index 5a70f52..0000000 --- a/net-wireless/tibtfm-wl1271/tibtfm-wl1271-0.24.9.ebuild +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright 1999-2007 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-wireless/zd1211-firmware/zd1211-firmware-1.4.ebuild,v 1.2 2007/11/03 12:03:19 dsd Exp $ - -EAPI="2" - -inherit eutils - -MY_P="${PN}_${PV}" - -DESCRIPTION="Texas Instruments WiLinkTM solution (WL1271) applications" -HOMEPAGE="https://gforge.ti.com/gf/project/wilink_drivers/" -BASE_URI="https://launchpad.net/~tiomap-dev/+archive/release/+files" -SRC_URI="${BASE_URI}/${MY_P}.orig.tar.gz" -SRC_URI="${SRC_URI} ${BASE_URI}/${MY_P}-0ubuntu6.diff.gz" - - - -LICENSE="TI-TSPA-v1" -SLOT="0" -KEYWORDS="arm" - -IUSE="" -RDEPEND="net-wireless/tibtfm-wl1271-firmware" -DEPEND="${RDEPEND}" - -src_prepare() { - cd ${WORKDIR} - - epatch ${MY_P}*.diff - cd "${S}" - epatch "${S}"/debian/patches/*.patch -} - -src_compile() { - cd "${S}"/uim - make -j1 -} - -src_install() { - cd "${S}" - dobin uim/uim - - newinitd "${FILESDIR}"/${PN}.init ${PN} -} diff --git a/net-wireless/tiwlan-wl1271-firmware/Manifest b/net-wireless/tiwlan-wl1271-firmware/Manifest deleted file mode 100644 index a2a82bc..0000000 --- a/net-wireless/tiwlan-wl1271-firmware/Manifest +++ /dev/null @@ -1,3 +0,0 @@ -DIST tiwlan-wl1271-firmware_0.24.9.1.orig.tar.gz 167524 RMD160 b094c1d787c889369d91f4b8c30bcaef5c6fdc5c SHA1 39a52b01792109f9fb9014fcc11f06bf2e74259b SHA256 b1641e294f1838911c39936c3e3cc23822dab32f42f84754e47c3b7f7cf1fe79 -EBUILD tiwlan-wl1271-firmware-0.24.9.1.ebuild 641 RMD160 4301708ec5ece7f8a7cb4b028de90b7a00d5e0ce SHA1 5cce61a3473f40970f41e0d8b820247588883351 SHA256 036ccbeb1ae1ce8bf9fb4870820bb68da8abab062c4042051f1440ceba156b84 -MISC metadata.xml 222 RMD160 3f50aa50f95905f1387e67bc72c80b4c1b63aab4 SHA1 b5ad6eab5a55d57fd25fa68a46d1359cc25759aa SHA256 b8f80af5f2e9d409535bd1e3981b685a013f820ec82b504d82d5c9c077cd9fa6 diff --git a/net-wireless/tiwlan-wl1271-firmware/metadata.xml b/net-wireless/tiwlan-wl1271-firmware/metadata.xml deleted file mode 100644 index f6b1086..0000000 --- a/net-wireless/tiwlan-wl1271-firmware/metadata.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> -<pkgmetadata> -<herd>no-herd</herd> -<maintainer> - <email>armin76@gentoo.org</email> -</maintainer> -</pkgmetadata> diff --git a/net-wireless/tiwlan-wl1271-firmware/tiwlan-wl1271-firmware-0.24.9.1.ebuild b/net-wireless/tiwlan-wl1271-firmware/tiwlan-wl1271-firmware-0.24.9.1.ebuild deleted file mode 100644 index eb00465..0000000 --- a/net-wireless/tiwlan-wl1271-firmware/tiwlan-wl1271-firmware-0.24.9.1.ebuild +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 1999-2007 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-wireless/zd1211-firmware/zd1211-firmware-1.4.ebuild,v 1.2 2007/11/03 12:03:19 dsd Exp $ - -DESCRIPTION="Firmware for Texas Instruments WiLinkTM solution (WL1271)" - -HOMEPAGE="https://gforge.ti.com/gf/project/wilink_drivers/" -SRC_URI="https://launchpad.net/~tiomap-dev/+archive/release/+files/tiwlan-wl1271-firmware_${PV}.orig.tar.gz" - - -LICENSE="TI-TSPA-v1" -SLOT="0" -KEYWORDS="arm" - -IUSE="" -DEPEND="" - - -src_install() { -# cd "${S}" - insinto /lib/firmware/tiwlan-wl1271 - doins firmware/firmware.bin -} diff --git a/net-wireless/tiwlan-wl1271/ChangeLog b/net-wireless/tiwlan-wl1271/ChangeLog deleted file mode 100644 index 625d23e..0000000 --- a/net-wireless/tiwlan-wl1271/ChangeLog +++ /dev/null @@ -1,8 +0,0 @@ -# ChangeLog for net-wireless/tiwlan-wl1271 -# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2 -# $Header: $ - - 24 Dec 2010; Raúl Porcel <armin76@gentoo.org> - tiwlan-wl1271-0.24.9.ebuild: - Enhanced ebuild - diff --git a/net-wireless/tiwlan-wl1271/Manifest b/net-wireless/tiwlan-wl1271/Manifest deleted file mode 100644 index 1f156f6..0000000 --- a/net-wireless/tiwlan-wl1271/Manifest +++ /dev/null @@ -1,5 +0,0 @@ -DIST tiwlan-wl1271_0.24.9-0ubuntu6.diff.gz 5228 RMD160 3dc0bb430d8e9b4cc12bbef050880b36c3af48af SHA1 72d21447f83b9113aa059c66db351a132c86dcb6 SHA256 bd9c72409a2cd79ff14c05f4e1d258840af68ef359edb8cbb3baf2f8c8d1c12c -DIST tiwlan-wl1271_0.24.9.orig.tar.gz 1251415 RMD160 f10c004a0770de6efd61eb5b6a7d4f20147b15ea SHA1 6fbfd5b8bb382ed68e66116e061e41a41bec5d98 SHA256 60a64c8c3daee9dc897a8918e2f082bcfcb4a3dbd66c013978e331e1c8e6127b -EBUILD tiwlan-wl1271-0.24.9.ebuild 1520 RMD160 1a480eb6cb864e704b0eacf932aca587b1c692fa SHA1 52bc6789e61fa3693e4c00012675ded6a51b34fc SHA256 30371da654faa299ae034fbdc14d6da7df6531b12db1eaa97981062b57f186df -MISC ChangeLog 226 RMD160 865cb82d56f68a03ebadb5952c5c81e31eb42987 SHA1 2db2fe47296b2ef3c65853077ea7b63308384a6c SHA256 60eb2847621f2908efd00cdedcfea3bf52e84d26143facafa0136841d79c7f53 -MISC metadata.xml 222 RMD160 3f50aa50f95905f1387e67bc72c80b4c1b63aab4 SHA1 b5ad6eab5a55d57fd25fa68a46d1359cc25759aa SHA256 b8f80af5f2e9d409535bd1e3981b685a013f820ec82b504d82d5c9c077cd9fa6 diff --git a/net-wireless/tiwlan-wl1271/metadata.xml b/net-wireless/tiwlan-wl1271/metadata.xml deleted file mode 100644 index f6b1086..0000000 --- a/net-wireless/tiwlan-wl1271/metadata.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> -<pkgmetadata> -<herd>no-herd</herd> -<maintainer> - <email>armin76@gentoo.org</email> -</maintainer> -</pkgmetadata> diff --git a/net-wireless/tiwlan-wl1271/tiwlan-wl1271-0.24.9.ebuild b/net-wireless/tiwlan-wl1271/tiwlan-wl1271-0.24.9.ebuild deleted file mode 100644 index 2e90a53..0000000 --- a/net-wireless/tiwlan-wl1271/tiwlan-wl1271-0.24.9.ebuild +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright 1999-2010 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-wireless/zd1211-firmware/zd1211-firmware-1.4.ebuild,v 1.2 2007/11/03 12:03:19 dsd Exp $ - -EAPI="2" - -inherit eutils linux-mod - -MY_P="${PN}_${PV}" - -DESCRIPTION="Texas Instruments WiLinkTM solution (WL1271) applications" -HOMEPAGE="https://gforge.ti.com/gf/project/wilink_drivers/" -BASE_URI="https://launchpad.net/~tiomap-dev/+archive/release/+files" -SRC_URI="${BASE_URI}/${MY_P}.orig.tar.gz" -SRC_URI="${SRC_URI} ${BASE_URI}/${MY_P}-0ubuntu6.diff.gz" - - - -LICENSE="TI-TSPA-v1" -SLOT="0" -KEYWORDS="arm" - -IUSE="" -RDEPEND="net-wireless/tiwlan-wl1271-firmware" -DEPEND="${RDEPEND}" - - -pkg_setup() { - linux-mod_pkg_setup - -} - -src_prepare() { - cd ${WORKDIR} - - epatch ${MY_P}*.diff - cd "${S}" - epatch "${S}"/debian/patches/*.patch - - cd wlan - cp wlan/Makefile . -} - -src_compile() { - cd wlan - # compile modules - emake -j1 KERNEL_HEADERS=${KV_DIR} || die - - # compile utils - cd CUDK - emake -j1 || die -} - -src_install() { -# cd "${S}" - insinto /etc/udev/rules.d/ - newins debian/tiwlan-wl1271-dkms.udev 40-tiwlan-wl1271.rules - - cd wlan/CUDK/output/ - newbin tiwlan_loader tiwlan_loader_wl1271 - newbin wlan_cu wlan_cu_wl1271 - cd ../../platforms/os/linux/ - insinto /lib/firmware/tiwlan-wl1271 - doins tiwlan.ini tiwlan_dual.ini - - cd "${S}"/wlan - insinto /lib/modules/${KV_FULL}/kernel/drivers/net/wireless/tiwlan-wl1271 - doins sdio.ko tiwlan_drv.ko - -} diff --git a/sys-kernel/omap4-sources/Manifest b/sys-kernel/omap4-sources/Manifest index c929c9a..8d9571d 100644 --- a/sys-kernel/omap4-sources/Manifest +++ b/sys-kernel/omap4-sources/Manifest @@ -1,3 +1,5 @@ -DIST linux-ti-omap4_2.6.35-903.21.tar.gz 92525616 RMD160 270560330295d8821c3fd97786311a3c3b368dc3 SHA1 b1d687914035c1791f12ef008523a14257e9cf05 SHA256 4c17428854800e17cf66d702a552c79614edc247280e2eb8d40383d3f61c8c7e -EBUILD omap4-sources-2.6.35.903.21.ebuild 577 RMD160 9fab1a35337dcfda1b55920d65bb5040fc5e7176 SHA1 8d628288133b0aa38a10f804957224c6a41ee62b SHA256 c7163f7c53b1d447bc23216b5d4d0847b409faa7c0897d08c9d77f1f12433acc +DIST linux-ti-omap4_2.6.35-980.1release9.tar.gz 96864653 RMD160 43f6842b80da45f30424730da6c1036bc4b27115 SHA1 b63641ac0f1211e8f1bdfa586f350d0c17fa2267 SHA256 bf36a5746e282c839365010fb3908ba41768fcc54ceb6d67e28168fe0f350ef3 +DIST linux-ti-omap4_2.6.38-1207.10.tar.gz 100113866 RMD160 31cf5ebbd5be67ec75583bce91d32462ce24e827 SHA1 71ff4f2e020d1798a02fe153bfa26f96e495c4cc SHA256 a0b7a54e3362d1a2077088d3ae4213e800b394b75e187977c5fdf0d142c355ee +EBUILD omap4-sources-2.6.35.980.1.9.ebuild 702 RMD160 52fe25f51123e0455e9ecc80f2051a04e04c6e0b SHA1 75bd9e8aec3e7bdeffd133e38b2f03218d9d0920 SHA256 da64086b86e45ac322048eb03fbe5d535af6cad9fb8208143683c6514ab5ef49 +EBUILD omap4-sources-2.6.38.1207.10.ebuild 574 RMD160 b4edddcc5e2d91c70ed7741d2968ac398c026f9f SHA1 64b28882fc92be7addf33ea0790c0fbe659fb95f SHA256 b74586ce37057dd1d0c40ee00ae80fe6dac5fda4ecd5f7083293e08ef5ff8efa MISC ChangeLog 663 RMD160 19c9debc73af5d511129a3826392ffed45fe8c59 SHA1 4ef0771489f535703215d31d88844eaf4939e499 SHA256 73e1c0fc7d1a00c7ea9a1171826d8920d36517757aa8e6a3b76ed5a1b54d4329 diff --git a/sys-kernel/omap4-sources/omap4-sources-2.6.35.903.21.ebuild b/sys-kernel/omap4-sources/omap4-sources-2.6.38.1207.10.ebuild index 4bffafe..e07ed9b 100644 --- a/sys-kernel/omap4-sources/omap4-sources-2.6.35.903.21.ebuild +++ b/sys-kernel/omap4-sources/omap4-sources-2.6.38.1207.10.ebuild @@ -21,7 +21,7 @@ S="${WORKDIR}" src_unpack() { unpack ${A} - mv ubuntu-maverick linux-${PV}-omap4 + mv ubuntu-natty linux-${PV}-omap4 } diff --git a/x11-drivers/pvr-omap4-kernel/Manifest b/x11-drivers/pvr-omap4-kernel/Manifest index 330388b..df27fe3 100644 --- a/x11-drivers/pvr-omap4-kernel/Manifest +++ b/x11-drivers/pvr-omap4-kernel/Manifest @@ -1,4 +1,4 @@ -DIST pvr-omap4-kernel_0.24.9-2.diff.gz 5198 RMD160 851c03ecf256bf5b48ee6999036ea3b4aaa55853 SHA1 cf10d0f0df7db2443ba0abadb040be404f504a7d SHA256 e8f26952e588dfe0d009df909faa4d9cceaaacecf48fc5902544c71506a2c81d -DIST pvr-omap4-kernel_0.24.9.orig.tar.gz 325677 RMD160 337236a41bc6d8a19b61214873bc80fcacea4151 SHA1 9b05cc80e93ee8eac34c73068386efeb417c3cf0 SHA256 0b404586a23eaebaa586ec18fd1da8cb3eed7682b1887823527ac62195e104bb -EBUILD pvr-omap4-kernel-0.24.9.ebuild 998 RMD160 6b42cd3f6b27acc99e6a1b2d5157111408a71f96 SHA1 6d60f97d3aae672c1b8b5b8afcbf9d47b55e9003 SHA256 f35b29f7befd00746d7b56e6a312295f140efd1d78cb10f1d9e9f9f9460a0beb +DIST pvr-omap4-kernel_1.7~git0f0b25f-2natty2.diff.gz 13621 RMD160 6399193111e475d79f579536f93885a83bd088b8 SHA1 e931e78cdb2abe23355c13656b915b7deb83ded3 SHA256 fd00668d34b698af60d0d62454a268a6aa98da522ab265153fb4f2310ba308fb +DIST pvr-omap4-kernel_1.7~git0f0b25f.orig.tar.gz 379145 RMD160 a22e28d016bd5f0e3e8684ef8f315b8e6e2f0155 SHA1 c03dde4b540238526fd17df2705961db29871d4e SHA256 f0302437c159224cb591d41f29c44404941e97dc106cdfe588357b449545b18a +EBUILD pvr-omap4-kernel-1.7.ebuild 948 RMD160 b3d20bbda4d9c22991ce213c29a5aecf4c70aa60 SHA1 5e78bc484dd28925e335a4879f070e551f2ba40e SHA256 92a181e281a946148438fc80372bb36ade820b67931e1e147e7674f0761f0813 MISC ChangeLog 282 RMD160 0855c8692ee9341c2362eced70bf4572b58316f5 SHA1 5a1a636c8e89b3d701126445f4bb167c4c3bbdda SHA256 be2697730c16019faba9e3440abca06ea219ef08744be943e97b5c9e2240a2d2 diff --git a/x11-drivers/pvr-omap4-kernel/pvr-omap4-kernel-0.24.9.ebuild b/x11-drivers/pvr-omap4-kernel/pvr-omap4-kernel-1.7.ebuild index 816fad5..46a4f3e 100644 --- a/x11-drivers/pvr-omap4-kernel/pvr-omap4-kernel-0.24.9.ebuild +++ b/x11-drivers/pvr-omap4-kernel/pvr-omap4-kernel-1.7.ebuild @@ -9,8 +9,8 @@ inherit eutils linux-mod DESCRIPTION="PowerVR SGX540 kernel driver for OMAP4" HOMEPAGE="" -SRC_URI="https://launchpad.net/~tiomap-dev/+archive/release/+files/${PN}_${PV}.orig.tar.gz -https://launchpad.net/~tiomap-dev/+archive/release/+files/${PN}_${PV}-2.diff.gz" +SRC_URI="https://launchpad.net/~tiomap-dev/+archive/omap-trunk/+files/${PN}_1.7~git0f0b25f.orig.tar.gz +https://launchpad.net/~tiomap-dev/+archive/omap-trunk/+files/${PN}_1.7~git0f0b25f-2natty2.diff.gz" LICENSE="TI" @@ -21,25 +21,24 @@ IUSE="" DEPEND="" S="${WORKDIR}/${P}/sgx" -RESTRICT="strip" +#RESTRICT="strip" src_prepare() { cd "${WORKDIR}" epatch *.diff - - cd "${S}/.." + + mv pvr-omap4-kernel-1.7~git0f0b25f ${P} + + cd "${P}" + epatch debian/patches/*.patch } src_compile() { -# cd eurasiacon/build/linux/omap4430_linux/kbuild/ - - export SUPPORT_XORG=1 - emake -j1 KERNELDIR="${KV_DIR}" LDFLAGS="" || die + emake -j1 KERNELDIR="${KV_DIR}" LDFLAGS="" FLAVOUR=release || die } src_install() { insinto /lib/modules/${KV_FULL}/kernel/extra -# doins eurasiacon/binary_omap4430_linux_release/pvrsrvkm.ko doins pvrsrvkm.ko } diff --git a/x11-drivers/pvr-omap4/Manifest b/x11-drivers/pvr-omap4/Manifest index 957970d..313b896 100644 --- a/x11-drivers/pvr-omap4/Manifest +++ b/x11-drivers/pvr-omap4/Manifest @@ -1,4 +1,4 @@ -DIST pvr-omap4_0.24.9c-1.diff.gz 9093 RMD160 88a2bea866a1b79d530289b6db5aa25644724e1e SHA1 911e8f9923449aa42a5df5f7fb3483d4b5431863 SHA256 ec75aba62209e86e0489427aead6619ab31b387a08f8575efc53cf60add773c6 -DIST pvr-omap4_0.24.9c.orig.tar.gz 1149685 RMD160 a6653bbd91746e1f8e8322614772cd96409cc8b2 SHA1 d3b6b0424a2fec88a5a3a16a0203f953e79f10ff SHA256 6b8e5904579ec3bae1467b5950d915bbad63ef3d0e54972370b9fddf9124852c -EBUILD pvr-omap4-0.24.9c.ebuild 875 RMD160 00ebd4e7e9e437032fa405df0324ed0e73402da2 SHA1 76aee2463ffa13de0038b2ceedb65b4e45be340a SHA256 9a90022025d4b654d4cf8e5f8766a84a8162f6bf256633bb6cbcb2df01db655b +DIST pvr-omap4_1.7~git0f0b25f.2natty5-1.diff.gz 9772 RMD160 139c944be520f0a405d10951821816e9fe407f10 SHA1 3fd724cb2c2b7a821a1f82a34d92e3766aab9432 SHA256 62776a6470ea3e921f130a3599d2f09ac9fcf7bf713920a10092be10b0616e6e +DIST pvr-omap4_1.7~git0f0b25f.2natty5.orig.tar.gz 1852247 RMD160 a9ed7cd33145bc1436b209801ab737df2474de65 SHA1 99c460048fdcdf66da3b6a7f91f463f597856df2 SHA256 e64e98ba3cd75a629390b22828295d7901dd844da5a4a73c91a360eb0d9ed9ef +EBUILD pvr-omap4-1.7.ebuild 1108 RMD160 c2371f0d41c65208b6d1713e1a34493d1e84b795 SHA1 b58a8db296c22a70e5fcd4ddee9fa2f25f0b0700 SHA256 d09706607e8fd39c1f70f0422b8f92287ba7450ad5240a1ef7ddd5f2b9a6f035 MISC ChangeLog 564 RMD160 e24f6483546ce946be8605a4950b8c92eb30cad2 SHA1 5be113fcf58be034eee14679ffeda3b73c00a9f1 SHA256 fa5dac271f0034d161be3e8abd4840db38242f9d3f911ff1e8680a2d4c97f631 diff --git a/x11-drivers/pvr-omap4/pvr-omap4-0.24.9c.ebuild b/x11-drivers/pvr-omap4/pvr-omap4-0.24.9c.ebuild deleted file mode 100644 index ac962ff..0000000 --- a/x11-drivers/pvr-omap4/pvr-omap4-0.24.9c.ebuild +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright 1999-2011 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/net-wireless/zd1211-firmware/zd1211-firmware-1.4.ebuild,v 1.2 2007/11/03 12:03:19 dsd Exp $ - -EAPI="3" - -inherit eutils - -DESCRIPTION="PowerVR SGX540 libraries for OMAP4" - -HOMEPAGE="" -SRC_URI="https://launchpad.net/~tiomap-dev/+archive/release/+files/${PN}_${PV}.orig.tar.gz -https://launchpad.net/~tiomap-dev/+archive/release/+files/${PN}_${PV}-1.diff.gz" - - -LICENSE="TI" -SLOT="0" -KEYWORDS="arm" - -IUSE="" -DEPEND=">=x11-base/xorg-server-1.9 - x11-libs/libdrm - =x11-drivers/pvr-omap4-kernel-0.24.9" -RDEPEND="${DEPEND}" - -S="${WORKDIR}" -RESTRICT="strip" - -src_prepare() { - epatch *.diff - mv ${P}/Makefile . -} - -src_install() { - make DESTDIR="${D}" install - rm -rf "${D}"/usr/lib/libEGL.so.1 \ - "${D}"/etc/init "${D}"/usr/lib/libOpenVG.so.1 - -} diff --git a/x11-drivers/pvr-omap4/pvr-omap4-1.7.ebuild b/x11-drivers/pvr-omap4/pvr-omap4-1.7.ebuild new file mode 100644 index 0000000..ce11a8e --- /dev/null +++ b/x11-drivers/pvr-omap4/pvr-omap4-1.7.ebuild @@ -0,0 +1,50 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-wireless/zd1211-firmware/zd1211-firmware-1.4.ebuild,v 1.2 2007/11/03 12:03:19 dsd Exp $ + +EAPI="3" + +inherit eutils + +DESCRIPTION="PowerVR SGX540 libraries for OMAP4" + +HOMEPAGE="" +SRC_URI="https://launchpad.net/~tiomap-dev/+archive/omap-trunk/+files/${PN}_1.7~git0f0b25f.2natty5.orig.tar.gz +https://launchpad.net/~tiomap-dev/+archive/omap-trunk/+files/${PN}_1.7~git0f0b25f.2natty5-1.diff.gz" + + +LICENSE="TI" +SLOT="0" +KEYWORDS="arm" + +IUSE="" +DEPEND=">=x11-base/xorg-server-1.10 + x11-libs/libdrm + =x11-drivers/pvr-omap4-kernel-1.7" +RDEPEND="${DEPEND}" + +#S="${WORKDIR}" +RESTRICT="strip" + +src_prepare() { + cd "${WORKDIR}" + epatch *.diff + + mv pvr-omap4-1.7~git0f0b25f.2natty5 ${P} +} + +src_install() { + make DESTDIR="${D}" install + + cd "${D}" + rm -rf usr/include/EGL \ + usr/include/KHR \ + usr/include/VG \ + usr/lib/libEGL.so \ + usr/lib/libOpenVG.so{,.1} \ + usr/lib/pkgconfig \ +# rm -rf "${D}"/usr/lib/libEGL.so.1 \ +# "${D}"/etc/init "${D}"/usr/lib/libOpenVG.so.1 + +} + |