diff options
Diffstat (limited to 'yocto-poky/meta/recipes-multimedia')
132 files changed, 6414 insertions, 0 deletions
diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-fpu.inc b/yocto-poky/meta/recipes-multimedia/alsa/alsa-fpu.inc new file mode 100644 index 000000000..50402307c --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-fpu.inc @@ -0,0 +1,6 @@ + +def get_alsa_fpu_setting(bb, d): + if d.getVar('TARGET_FPU', True) in [ 'soft' ]: + return "--with-softfloat" + return "" + diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-lib/0001-build-Do-not-try-to-detect-cross-compiler.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-lib/0001-build-Do-not-try-to-detect-cross-compiler.patch new file mode 100644 index 000000000..583bc3daa --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-lib/0001-build-Do-not-try-to-detect-cross-compiler.patch @@ -0,0 +1,45 @@ +From 17aeb3565f411e7796cabe403f92d15948a8ca95 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Fri, 21 Aug 2015 14:42:45 -0700 +Subject: [PATCH] build: Do not try to detect cross-compiler + +cross compilers are passed via path may not be a gcc based cross +compiler in such cases this check fails and try's to force gcc based +cross compiler detection, This code is a convenience that limits the +build system + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- +Upstream-Status: Pending + + configure.ac | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 3022cf8..9d77440 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -27,20 +27,6 @@ AC_PREFIX_DEFAULT(/usr) + + dnl Checks for programs. + +-dnl try to gues cross-compiler if not set +-if test "x$host" != "x$build" -a -z "`echo $CC | grep -e '-gcc'`"; +-then +- AC_MSG_CHECKING(for cross-compiler) +- +- which ${program_prefix}gcc >/dev/null 2>&1 && CC=${program_prefix}gcc +- which ${host_cpu}-${host_os}-gcc >/dev/null 2>&1 \ +- && CC=${host_cpu}-${host_os}-gcc +- which ${host_cpu}-${host_vendor}-${host_os}-gcc >/dev/null 2>&1 \ +- && CC=${host_cpu}-${host_vendor}-${host_os}-gcc +- +- AC_MSG_RESULT($CC) +-fi +- + CFLAGS="$CFLAGS -D_GNU_SOURCE" + + +-- +2.1.4 + diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-lib/Check-if-wordexp-function-is-supported.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-lib/Check-if-wordexp-function-is-supported.patch new file mode 100644 index 000000000..75a6eb8a3 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-lib/Check-if-wordexp-function-is-supported.patch @@ -0,0 +1,51 @@ +From e33357b59a10d44e9bec5d24100ce23ca300cc79 Mon Sep 17 00:00:00 2001 +From: "Hong H. Pham" <hong.pham@windriver.com> +Date: Fri, 29 Aug 2014 17:13:55 +0300 +Subject: [PATCH] Check if wordexp function is supported + +eglibc could be configured to build without wordexp, so it is not enough +to check if wordexp.h exists (the header file could be installed, but it's +possible that the wordexp() function is not supported). An additional +check if wordexp() is supported by the system C library is needed. + +Upstream-Status: Inappropriate [configuration] + +Signed-off-by: Hong H. Pham <hong.pham@windriver.com> +Signed-off-by: Cristian Iorga <cristian.iorga@intel.com> +--- + configure.ac | 5 ++++- + src/userfile.c | 2 +- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index b8353a0..773b72f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -311,7 +311,10 @@ fi + AC_SUBST(ALSA_DEPLIBS) + + dnl Check for headers +-AC_CHECK_HEADERS([wordexp.h endian.h sys/endian.h]) ++AC_CHECK_HEADERS([wordexp.h endian.h sys/endian.h], ++ dnl Make sure wordexp is supported by the C library ++ AC_CHECK_FUNCS([wordexp]) ++) + + dnl Check for resmgr support... + AC_MSG_CHECKING(for resmgr support) +diff --git a/src/userfile.c b/src/userfile.c +index 3a73836..b8ce809 100644 +--- a/src/userfile.c ++++ b/src/userfile.c +@@ -32,7 +32,7 @@ + * stores the first matchine one. The returned string is strdup'ed. + */ + +-#ifdef HAVE_WORDEXP_H ++#if (defined(HAVE_WORDEXP_H) && defined(HAVE_WORDEXP)) + #include <wordexp.h> + #include <assert.h> + int snd_user_file(const char *file, char **result) +-- +1.9.1 + diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-lib_1.0.29.bb b/yocto-poky/meta/recipes-multimedia/alsa/alsa-lib_1.0.29.bb new file mode 100644 index 000000000..730f42740 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-lib_1.0.29.bb @@ -0,0 +1,51 @@ +SUMMARY = "ALSA sound library" +HOMEPAGE = "http://www.alsa-project.org" +BUGTRACKER = "https://bugtrack.alsa-project.org/alsa-bug/login_page.php" +SECTION = "libs/multimedia" +LICENSE = "LGPLv2.1 & GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34 \ + file://src/socket.c;beginline=1;endline=26;md5=11ff89a8a7a4a690a5c78effe8159545" + +BBCLASSEXTEND = "native nativesdk" + +# configure.in sets -D__arm__ on the command line for any arm system +# (not just those with the ARM instruction set), this should be removed, +# (or replaced by a permitted #define). +#FIXME: remove the following +ARM_INSTRUCTION_SET = "arm" + +SRC_URI = "ftp://ftp.alsa-project.org/pub/lib/${BP}.tar.bz2 \ + file://Check-if-wordexp-function-is-supported.patch \ + file://0001-build-Do-not-try-to-detect-cross-compiler.patch \ +" +SRC_URI[md5sum] = "de67e0eca72474d6b1121037dafe1024" +SRC_URI[sha256sum] = "73043c35eb9636be0f4af6a240235c213f12a25feb1f04aeeac8cb7e30fcbdd0" + +inherit autotools pkgconfig + +require alsa-fpu.inc +EXTRA_OECONF += "${@get_alsa_fpu_setting(bb, d)} " + +EXTRA_OECONF = "--disable-python" + +EXTRA_OECONF_append_libc-uclibc = " --with-versioned=no " + +PACKAGES =+ "alsa-server libasound alsa-conf-base alsa-conf alsa-doc" +FILES_${PN} += "${libdir}/${BPN}/smixer/*.so" +FILES_${PN}-dbg += "${libdir}/${BPN}/smixer/.debug" +FILES_${PN}-dev += "${libdir}/${BPN}/smixer/*.la" +FILES_libasound = "${libdir}/libasound.so.*" +FILES_alsa-server = "${bindir}/*" +FILES_alsa-conf = "${datadir}/alsa/" +FILES_alsa-conf-base = "\ +${datadir}/alsa/alsa.conf \ +${datadir}/alsa/cards/aliases.conf \ +${datadir}/alsa/pcm/default.conf \ +${datadir}/alsa/pcm/dmix.conf \ +${datadir}/alsa/pcm/dsnoop.conf" + +RDEPENDS_libasound = "alsa-conf-base alsa-conf" +# upgrade path +RPROVIDES_${PN}-dev = "alsa-dev" +RREPLACES_${PN}-dev = "alsa-dev" +RCONFLICTS_${PN}-dev = "alsa-dev" diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-plugins/0001-arcam-av-Include-sys-select.h-for-fd_set-definition.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-plugins/0001-arcam-av-Include-sys-select.h-for-fd_set-definition.patch new file mode 100644 index 000000000..c70c72cb7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-plugins/0001-arcam-av-Include-sys-select.h-for-fd_set-definition.patch @@ -0,0 +1,31 @@ +From d28c655be3ac4fcb8024555983884f832ee18787 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Fri, 29 May 2015 15:17:30 -0700 +Subject: [PATCH] arcam-av: Include sys/select.h for fd_set definition + +fixes build errors on non-glibc based systems + +arcam-av/arcam_av.c:389:2: error: unknown type name 'fd_set' + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- +Upstream-Status: Submitted + + arcam-av/arcam_av.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arcam-av/arcam_av.c b/arcam-av/arcam_av.c +index 0491fc6..fff96f9 100644 +--- a/arcam-av/arcam_av.c ++++ b/arcam-av/arcam_av.c +@@ -31,6 +31,7 @@ + #include <unistd.h> + + #include <sys/ipc.h> ++#include <sys/select.h> + #include <sys/shm.h> + #include <sys/stat.h> + #include <sys/stat.h> +-- +2.1.4 + diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-plugins/0001-include-speexdsp_types.h-not-speex_types.h.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-plugins/0001-include-speexdsp_types.h-not-speex_types.h.patch new file mode 100644 index 000000000..e5199fb85 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-plugins/0001-include-speexdsp_types.h-not-speex_types.h.patch @@ -0,0 +1,71 @@ +From ca41e96a49a568128354f65f90a769debf5435f1 Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen <tanu.kaskinen@linux.intel.com> +Date: Thu, 9 Jul 2015 11:58:12 +0300 +Subject: [PATCH] include speexdsp_types.h, not speex_types.h + +Speexdsp was separated from speex in 1.2rc2. speex_types.h is not +shipped by speexdsp, so alsa-plugins shouldn't use that file. speexdsp +has speexdsp_types.h, which has the same contents as speex_types.h. + +speexdsp_types.h is a new file introduced in 1.2rc2, so this change +bumps the minimum supported speexdsp version. The version check in +configure.ac will actually break if speexdsp 1.2 ever gets released, +because pkg-config thinks that "1.2" < "1.2rc2", but I think it's +useful to fail if the installed speexdsp version is 1.2rc1 (which I +believe is very common on current distributions). If a non-rc version +of speexdsp will ever get released, I hope version number 1.2 will be +skipped for this reason. (A non-rc version seems unlikely, since +1.2rc1 was released years ago, so it's pretty likely that the project +is stuck on so called "release candidates" forever...) + +Upstream-Status: Submitted (http://thread.gmane.org/gmane.linux.alsa.devel/141149) + +Signed-off-by: Tanu Kaskinen <tanu.kaskinen@linux.intel.com> +--- + configure.ac | 2 +- + pph/arch.h | 2 +- + pph/speex_resampler.h | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 902a6d7..c554d22 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -108,7 +108,7 @@ AC_SUBST(AVCODEC_CFLAGS) + AC_SUBST(AVCODEC_LIBS) + AC_SUBST(AVCODEC_HEADER) + +-PKG_CHECK_MODULES(speexdsp, [speexdsp >= 1.2], [HAVE_SPEEXDSP="yes"], [HAVE_SPEEXDSP=""]) ++PKG_CHECK_MODULES(speexdsp, [speexdsp >= 1.2rc2], [HAVE_SPEEXDSP="yes"], [HAVE_SPEEXDSP=""]) + AM_CONDITIONAL(HAVE_SPEEXDSP, test "$HAVE_SPEEXDSP" = "yes") + + AC_ARG_WITH([speex], +diff --git a/pph/arch.h b/pph/arch.h +index e2d731a..a07d0d9 100644 +--- a/pph/arch.h ++++ b/pph/arch.h +@@ -36,7 +36,7 @@ + #define ARCH_H + + #ifndef OUTSIDE_SPEEX +-#include "speex/speex_types.h" ++#include "speex/speexdsp_types.h" + #endif + + #define ABS(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute integer value. */ +diff --git a/pph/speex_resampler.h b/pph/speex_resampler.h +index c44fbcd..aa85abb 100644 +--- a/pph/speex_resampler.h ++++ b/pph/speex_resampler.h +@@ -82,7 +82,7 @@ + + #else /* OUTSIDE_SPEEX */ + +-#include "speex/speex_types.h" ++#include "speex/speexdsp_types.h" + + #endif /* OUTSIDE_SPEEX */ + +-- +1.9.3 + diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-plugins_1.0.29.bb b/yocto-poky/meta/recipes-multimedia/alsa/alsa-plugins_1.0.29.bb new file mode 100644 index 000000000..c928618c8 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-plugins_1.0.29.bb @@ -0,0 +1,105 @@ +DESCRIPTION = "ALSA Plugins" +HOMEPAGE = "http://alsa-project.org" +SECTION = "multimedia" + +# The primary license of alsa-plugins is LGPLv2.1. +# +# m4/attributes.m4 is licensed under GPLv2+. m4/attributes.m4 is part of the +# build system, and doesn't affect the licensing of the build result. +# +# The samplerate plugin source code is licensed under GPLv2+ to be consistent +# with the libsamplerate license. +LICENSE = "LGPLv2.1 & GPLv2+" +LIC_FILES_CHKSUM = "\ + file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34 \ + file://COPYING.GPL;md5=94d55d512a9ba36caa9b7df079bae19f \ + file://m4/attributes.m4;endline=33;md5=b25958da44c02231e3641f1bccef53eb \ + file://rate/rate_samplerate.c;endline=19;md5=f3d3ce0b189846a486517d97a854b276 \ +" + +SRC_URI = "ftp://ftp.alsa-project.org/pub/plugins/${BP}.tar.bz2 \ + file://0001-arcam-av-Include-sys-select.h-for-fd_set-definition.patch \ + file://0001-include-speexdsp_types.h-not-speex_types.h.patch \ +" +SRC_URI[md5sum] = "a66797b4471e3cbe96575207bfbe252c" +SRC_URI[sha256sum] = "325d85cac285f632b83e0191ae3f348bad03c1f007b937042f164abb81ea6532" + +DEPENDS += "alsa-lib" + +inherit autotools pkgconfig + +PACKAGECONFIG ??= "\ + samplerate \ + speexdsp \ + ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \ +" +PACKAGECONFIG[avcodec] = "--enable-avcodec,--disable-avcodec,libav" +PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack" +PACKAGECONFIG[maemo-plugin] = "--enable-maemo-plugin,--disable-maemo-plugin" +PACKAGECONFIG[maemo-resource-manager] = "--enable-maemo-resource-manager,--disable-maemo-resource-manager,dbus" +PACKAGECONFIG[pulseaudio] = "--enable-pulseaudio,--disable-pulseaudio,pulseaudio" +PACKAGECONFIG[samplerate] = "--enable-samplerate,--disable-samplerate,libsamplerate0" +PACKAGECONFIG[speexdsp] = "--with-speex=lib,--with-speex=no,speexdsp" + +PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'alsa-plugins-pulseaudio-conf', '', d)}" + +PACKAGES_DYNAMIC = "^libasound-module-.*" + +# The alsa-plugins package doesn't itself contain anything, it just depends on +# all built plugins. +ALLOW_EMPTY_${PN} = "1" + +do_install_append() { + rm ${D}${libdir}/alsa-lib/*.la + + # We use the example as is, so just drop the .example suffix. + if [ "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'yes', 'no', d)}" = "yes" ]; then + mv ${D}${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf.example ${D}${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf + fi +} + +python populate_packages_prepend() { + plugindir = bb.data.expand('${libdir}/alsa-lib/', d) + packages = " ".join(do_split_packages(d, plugindir, '^libasound_module_(.*)\.so$', 'libasound-module-%s', 'Alsa plugin for %s', extra_depends='')) + d.setVar("RDEPENDS_alsa-plugins", packages) +} + +# The rate plugins create some symlinks. For example, the samplerate plugin +# creates these links to the main plugin file: +# +# libasound_module_rate_samplerate_best.so +# libasound_module_rate_samplerate_linear.so +# libasound_module_rate_samplerate_medium.so +# libasound_module_rate_samplerate_order.so +# +# The other rate plugins create similar links. We have to add the links to +# FILES manually, because do_split_packages() skips the links (which is good, +# because we wouldn't want do_split_packages() to create separate packages for +# the symlinks). +# +# The symlinks cause QA errors, because usually it's a bug if a non +# -dev/-dbg/-nativesdk package contains links to .so files, but in this case +# the errors are false positives, so we disable the QA checks. +FILES_${MLPREFIX}libasound-module-rate-lavcrate += "${libdir}/alsa-lib/*rate_lavcrate_*.so" +FILES_${MLPREFIX}libasound-module-rate-samplerate += "${libdir}/alsa-lib/*rate_samplerate_*.so" +FILES_${MLPREFIX}libasound-module-rate-speexrate += "${libdir}/alsa-lib/*rate_speexrate_*.so" +INSANE_SKIP_${MLPREFIX}libasound-module-rate-lavcrate = "dev-so" +INSANE_SKIP_${MLPREFIX}libasound-module-rate-samplerate = "dev-so" +INSANE_SKIP_${MLPREFIX}libasound-module-rate-speexrate = "dev-so" + +FILES_${PN}-dbg += "${libdir}/alsa-lib/.debug" + +# 50-pulseaudio.conf defines a device named "pulse" that applications can use +# if they explicitly want to use the PulseAudio plugin. +# 99-pulseaudio-default.conf configures the "default" device to use the +# PulseAudio plugin. +FILES_${PN}-pulseaudio-conf += "\ + ${datadir}/alsa/alsa.conf.d/50-pulseaudio.conf \ + ${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf \ +" + +RDEPENDS_${PN}-pulseaudio-conf += "\ + libasound-module-conf-pulse \ + libasound-module-ctl-pulse \ + libasound-module-pcm-pulse \ +" diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/0001-as10k1-Make-output_tram_line-static-inline.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/0001-as10k1-Make-output_tram_line-static-inline.patch new file mode 100644 index 000000000..d049a30d2 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/0001-as10k1-Make-output_tram_line-static-inline.patch @@ -0,0 +1,31 @@ +From 1e5926df74a35fe2cd90bc59f5264a8715c94048 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Mon, 7 Sep 2015 08:16:59 +0000 +Subject: [PATCH] as10k1: Make output_tram_line() static inline + +The function is not used in any other file, its better to make it static +inline so compiler has a better chance of optimizing here + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- +Upstream-Status: Pending + + as10k1/as10k1.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/as10k1/as10k1.c b/as10k1/as10k1.c +index 96af0c3..d0766fd 100644 +--- a/as10k1/as10k1.c ++++ b/as10k1/as10k1.c +@@ -366,7 +366,7 @@ void as_exit(const char *message) + exit(1); + } + +-inline void output_tram_line( struct list_head *line_head, int type){ ++static inline void output_tram_line( struct list_head *line_head, int type){ + + struct tram *tram_sym; + struct list_head *entry; +-- +2.5.1 + diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/autotools.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/autotools.patch new file mode 100644 index 000000000..59391d690 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/autotools.patch @@ -0,0 +1,32 @@ +Add parameters to autoreconf to support cross compile. +Remove some sub-components which needs further recipe support. + +Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com> + +Upstream-Status: Inappropriate [configuration] + +diff -ruN alsa-tools-1.0.24.1-orig//ld10k1/gitcompile alsa-tools-1.0.24.1/ld10k1/gitcompile +--- alsa-tools-1.0.24.1-orig//ld10k1/gitcompile 2011-07-06 11:27:40.227665002 +0800 ++++ alsa-tools-1.0.24.1/ld10k1/gitcompile 2011-07-14 13:26:18.017665004 +0800 +@@ -1,6 +1,6 @@ + #!/bin/bash + +-autoreconf -fi || exit 1 ++autoreconf $ACLOCAL_FLAGS -fi || exit 1 + export CFLAGS='-O2 -Wall -pipe -g' + echo "CFLAGS=$CFLAGS" + echo "./configure $@" +diff -ruN alsa-tools-1.0.24.1-orig//Makefile alsa-tools-1.0.24.1/Makefile +--- alsa-tools-1.0.24.1-orig//Makefile 2011-07-06 11:27:40.207665000 +0800 ++++ alsa-tools-1.0.24.1/Makefile 2011-07-14 15:08:08.877665009 +0800 +@@ -1,8 +1,8 @@ + VERSION = 1.0.29 + TOP = . +-SUBDIRS = as10k1 envy24control hdsploader hdspconf hdspmixer \ ++SUBDIRS = as10k1 envy24control \ + mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ +- us428control usx2yloader vxloader echomixer ld10k1 qlo10k1 \ ++ us428control usx2yloader vxloader echomixer \ + hwmixvolume hdajackretask hda-verb hdajacksensetest + + all: diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/gitcompile_hdajacksensetest b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/gitcompile_hdajacksensetest new file mode 100755 index 000000000..58328bd3a --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/gitcompile_hdajacksensetest @@ -0,0 +1,13 @@ +#!/bin/bash + +aclocal $ACLOCAL_FLAGS || exit 1 +automake --foreign --add-missing || exit 1 +autoconf || exit 1 +export CFLAGS='-O2 -Wall -pipe -g' +echo "CFLAGS=$CFLAGS" +echo "./configure $@" +./configure $@ || exit 1 +unset CFLAGS +if [ -z "$GITCOMPILE_NO_MAKE" ]; then + make || exit 1 +fi diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/makefile_no_gtk.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/makefile_no_gtk.patch new file mode 100644 index 000000000..c95760961 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools/makefile_no_gtk.patch @@ -0,0 +1,29 @@ +Remove some sub-components which need gtk+. + +Upstream-Status: Inappropriate [configuration] + +Signed-off-by: Rogerio Nunes <ronunes@gmail.com> +Signed-off-by: Otavio Salvador <otavio@ossystems.com.br> + +Update patch for alsa-tools 1.0.29 + +Signed-off-by: Kai Kang <kai.kang@windriver.com> + +diff --git a/Makefile b/Makefile +index 2457a1c..72346d9 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,9 +1,9 @@ + VERSION = 1.0.29 + TOP = . +-SUBDIRS = as10k1 envy24control \ +- mixartloader pcxhrloader rmedigicontrol sb16_csp seq sscape_ctl \ +- us428control usx2yloader vxloader echomixer \ +- hwmixvolume hdajackretask hda-verb hdajacksensetest ++SUBDIRS = as10k1 \ ++ mixartloader pcxhrloader sb16_csp seq sscape_ctl \ ++ us428control usx2yloader vxloader \ ++ hwmixvolume hda-verb hdajacksensetest + + all: + @for i in $(SUBDIRS); do \ diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools_1.0.29.bb b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools_1.0.29.bb new file mode 100644 index 000000000..fdf396e3f --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-tools_1.0.29.bb @@ -0,0 +1,42 @@ +SUMMARY = "Advanced tools for certain ALSA sound card drivers" +HOMEPAGE = "http://www.alsa-project.org" +BUGTRACKER = "https://bugtrack.alsa-project.org/alsa-bug/login_page.php" +SECTION = "console/utils" +LICENSE = "GPLv2 & LGPLv2+" +DEPENDS = "alsa-lib ncurses glib-2.0" + +LIC_FILES_CHKSUM = "file://hdsploader/COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \ + file://ld10k1/COPYING.LIB;md5=7fbc338309ac38fefcd64b04bb903e34" + +SRC_URI = "ftp://ftp.alsa-project.org/pub/tools/${BP}.tar.bz2 \ + file://autotools.patch \ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', \ + 'file://makefile_no_gtk.patch', d)} \ + file://gitcompile_hdajacksensetest \ + file://0001-as10k1-Make-output_tram_line-static-inline.patch \ + " + +SRC_URI[md5sum] = "f339a3cd24f748c9d007bdff0e98775b" +SRC_URI[sha256sum] = "94abf0ab5a73f0710c70d4fb3dc1003af5bae2d2ed721d59d245b41ad0f2fbd1" + +inherit autotools-brokensep pkgconfig + +CLEANBROKEN = "1" + +EXTRA_OEMAKE += "GITCOMPILE_ARGS='--host=${HOST_SYS} --build=${BUILD_SYS} --target=${TARGET_SYS} --with-libtool-sysroot=${STAGING_DIR_HOST} --prefix=${prefix}'" + +PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gtk+', '', d)}" +PACKAGECONFIG[gtk+] = ",,gtk+ gtk+3," + +# configure.ac/.in doesn't exist so force copy +AUTOTOOLS_COPYACLOCAL = "1" + +do_compile_prepend () { + #Automake dir is not correctly detected in cross compilation case + export AUTOMAKE_DIR="$(automake --print-libdir)" + export ACLOCAL_FLAGS="--system-acdir=${ACLOCALDIR}/" + + cp ${WORKDIR}/gitcompile_hdajacksensetest ${S}/hdajacksensetest/gitcompile +} + +FILES_${PN} += "${datadir}/ld10k1" diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.0.29.bb b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.0.29.bb new file mode 100644 index 000000000..a98f9b90b --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.0.29.bb @@ -0,0 +1,21 @@ +require alsa-utils_${PV}.bb + +SUMMARY = "Shell scripts that show help info and create ALSA configuration files" +PROVIDES = "alsa-utils-alsaconf" + +FILESEXTRAPATHS_prepend := "${THISDIR}/alsa-utils:" + +PACKAGES = "${PN}" +RDEPENDS_${PN} += "bash" + +FILES_${PN} = "${sbindir}/alsaconf \ + ${sbindir}/alsa-info.sh \ + " + +S = "${WORKDIR}/alsa-utils-${PV}" + +do_install() { + install -d ${D}${sbindir} + install -m 0755 ${B}/alsaconf/alsaconf ${D}${sbindir}/ + install -m 0755 ${S}/alsa-info/alsa-info.sh ${D}${sbindir}/ +} diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-don-t-let-systemd-unit-restore-the-volume-wh.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-don-t-let-systemd-unit-restore-the-volume-wh.patch new file mode 100644 index 000000000..e99dd515f --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils/0001-alsactl-don-t-let-systemd-unit-restore-the-volume-wh.patch @@ -0,0 +1,52 @@ +From 43a56fa36a12f09ccd78b3cf5e6ae197fcab501f Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen@dominion.thruhere.net> +Date: Fri, 29 Aug 2014 18:58:56 +0300 +Subject: [PATCH] alsactl: don't let systemd unit restore the volume when + asound.state is missing + +This avoids an error on bootup + +Filed as https://bugtrack.alsa-project.org/alsa-bug/view.php?id=5459 + +Upstream-Status: Pending + +Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> +Signed-off-by: Cristian Iorga <cristian.iorga@intel.com> +--- + alsactl/Makefile.am | 7 ++++--- + alsactl/alsa-restore.service.in | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/alsactl/Makefile.am b/alsactl/Makefile.am +index 47f06e9..b728c06 100644 +--- a/alsactl/Makefile.am ++++ b/alsactl/Makefile.am +@@ -43,9 +43,10 @@ install-data-hook: + endif + + edit = \ +- $(SED) -r -e 's,@sbindir\@,$(sbindir),g' \ +- -e 's,@mydatadir\@,$(mydatadir),g' \ +- -e 's,@daemonswitch\@,$(ALSACTL_DAEMONSWITCH),g' \ ++ $(SED) -e 's,@localstatedir\@,$(localstatedir),g' \ ++ -e 's,@sbindir\@,$(sbindir),g' \ ++ -e 's,@mydatadir\@,$(mydatadir),g' \ ++ -e 's,@daemonswitch\@,$(ALSACTL_DAEMONSWITCH),g' \ + < $< > $@ || rm $@ + + alsa-state.service: alsa-state.service.in +diff --git a/alsactl/alsa-restore.service.in b/alsactl/alsa-restore.service.in +index 245a439..b017854 100644 +--- a/alsactl/alsa-restore.service.in ++++ b/alsactl/alsa-restore.service.in +@@ -10,6 +10,7 @@ DefaultDependencies=no + After=alsa-state.service + Before=shutdown.target + Conflicts=shutdown.target ++ConditionPathExists=@localstatedir@/lib/alsa/asound.state + + [Service] + Type=oneshot +-- +1.9.1 + diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils/alsa-utils-aplay-interrupt-signal-handling.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils/alsa-utils-aplay-interrupt-signal-handling.patch new file mode 100644 index 000000000..5df004aea --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils/alsa-utils-aplay-interrupt-signal-handling.patch @@ -0,0 +1,48 @@ +Upstream-Status: Pending + +aplay/arecord (alsa-utils v1.0.28) cannot interrupt streaming +via CTRL-C. Fixed the issue by reverting buggy patches and +properly handling 'in_aborting' flag in appropriate functions. + +Signed-off-by: Anant Agrawal <Anant_Agrawal@mentor.com> +Signed-off-by: Mikhail Durnev <mikhail_durnev@mentor.com> + +--- a/aplay/aplay.c 2014-05-19 16:25:14.000000000 +0530 ++++ b/aplay/aplay.c 2014-05-20 15:17:14.364823007 +0530 +@@ -392,14 +392,22 @@ + putchar('\n'); + if (!quiet_mode) + fprintf(stderr, _("Aborted by signal %s...\n"), strsignal(sig)); +- if (handle) ++ if (stream == SND_PCM_STREAM_CAPTURE) { ++ if (fmt_rec_table[file_type].end) { ++ fmt_rec_table[file_type].end(fd); ++ fd = -1; ++ } ++ stream = -1; ++ } ++ if (fd > 1) { ++ close(fd); ++ fd = -1; ++ } ++ if (handle && sig != SIGABRT) { + snd_pcm_abort(handle); +- if (sig == SIGABRT) { +- /* do not call snd_pcm_close() and abort immediately */ + handle = NULL; +- prg_exit(EXIT_FAILURE); + } +- signal(sig, signal_handler); ++ prg_exit(EXIT_FAILURE); + } + + /* call on SIGUSR1 signal. */ +@@ -2096,7 +2104,7 @@ + ssize_t result = count, r; + size_t size; + +- while (count > 0) { ++ while (count > 0 && !in_aborting) { + size = count; + if (size > chunk_bytes - buffer_pos) + size = chunk_bytes - buffer_pos; diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils/assume-storing-is-success-if-not-sound-card-device.patch b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils/assume-storing-is-success-if-not-sound-card-device.patch new file mode 100644 index 000000000..f67283db7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils/assume-storing-is-success-if-not-sound-card-device.patch @@ -0,0 +1,34 @@ +[PATCH] assume storing is success if not sound card device + +Upstream-Statue: Pending + +Systemd will report failure when run alsa-*, if the machine has not the +sound card. To void this annoyed message, alsa-restore/alsa-state ignore +all the exit codes by prefixing "-" in ExecStart, like: + + alsa-utils-1.0.29$ grep "=-" ./ -r|grep service.in + ./alsactl/alsa-restore.service.in:ExecStart=-@sbindir@/alsactl restore + ./alsactl/alsa-state.service.in:ExecStart=-@sbindir@/alsactl -s -n 19 -c rdaemon + ./alsactl/alsa-state.service.in:ExecStop=-@sbindir@/alsactl -s kill save_and_quit + lsa-utils-1.0.29$ + +But alsa-store.service.in is missing, and better solution is to ignore +the exit code 19 which means not sound card device, not all exit code + +Signed-off-by: Roy Li <rongqing.li@windriver.com> +--- + alsactl/alsa-store.service.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/alsactl/alsa-store.service.in b/alsactl/alsa-store.service.in +index f1a56bb..68ca529 100644 +--- a/alsactl/alsa-store.service.in ++++ b/alsactl/alsa-store.service.in +@@ -13,3 +13,4 @@ Before=shutdown.target + Type=oneshot + ExecStart=@sbindir@/alsactl store + StandardOutput=syslog ++SuccessExitStatus=0 19 +-- +1.9.1 + diff --git a/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils_1.0.29.bb b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils_1.0.29.bb new file mode 100644 index 000000000..97fe4b2fe --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/alsa/alsa-utils_1.0.29.bb @@ -0,0 +1,97 @@ +SUMMARY = "ALSA sound utilities" +HOMEPAGE = "http://www.alsa-project.org" +BUGTRACKER = "https://bugtrack.alsa-project.org/alsa-bug/login_page.php" +SECTION = "console/utils" +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \ + file://alsactl/utils.c;beginline=1;endline=20;md5=fe9526b055e246b5558809a5ae25c0b9" +DEPENDS = "alsa-lib ncurses libsamplerate0" + +PACKAGECONFIG ??= "udev" +PACKAGECONFIG[udev] = "--with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d,,udev" +PACKAGECONFIG[xmlto] = "--enable-xmlto, --disable-xmlto, xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native" + +SRC_URI = "ftp://ftp.alsa-project.org/pub/utils/alsa-utils-${PV}.tar.bz2 \ + file://0001-alsactl-don-t-let-systemd-unit-restore-the-volume-wh.patch \ + file://alsa-utils-aplay-interrupt-signal-handling.patch \ + file://assume-storing-is-success-if-not-sound-card-device.patch \ + " + +SRC_URI[md5sum] = "6b289bf874c4c9a63f4b3973093dd404" +SRC_URI[sha256sum] = "5160058f3e14483ced5de919dd473f93932059454530a9b7ef97dcabd6833e9b" + +# lazy hack. needs proper fixing in gettext.m4, see +# http://bugs.openembedded.org/show_bug.cgi?id=2348 +# please close bug and remove this comment when properly fixed +# +EXTRA_OECONF_append_libc-uclibc = " --disable-nls" + +inherit autotools gettext pkgconfig + +# This are all packages that we need to make. Also, the now empty alsa-utils +# ipk depends on them. + +ALSA_UTILS_PKGS = "\ + alsa-utils-alsamixer \ + alsa-utils-midi \ + alsa-utils-aplay \ + alsa-utils-amixer \ + alsa-utils-aconnect \ + alsa-utils-iecset \ + alsa-utils-speakertest \ + alsa-utils-aseqnet \ + alsa-utils-aseqdump \ + alsa-utils-alsactl \ + alsa-utils-alsaloop \ + alsa-utils-alsaucm \ + " + +PACKAGES += "${ALSA_UTILS_PKGS}" +RDEPENDS_${PN} += "${ALSA_UTILS_PKGS}" + +FILES_${PN} = "" +FILES_alsa-utils-aplay = "${bindir}/aplay ${bindir}/arecord" +FILES_alsa-utils-amixer = "${bindir}/amixer" +FILES_alsa-utils-alsamixer = "${bindir}/alsamixer" +FILES_alsa-utils-speakertest = "${bindir}/speaker-test ${datadir}/sounds/alsa/ ${datadir}/alsa/speaker-test/" +FILES_alsa-utils-midi = "${bindir}/aplaymidi ${bindir}/arecordmidi ${bindir}/amidi" +FILES_alsa-utils-aconnect = "${bindir}/aconnect" +FILES_alsa-utils-aseqnet = "${bindir}/aseqnet" +FILES_alsa-utils-iecset = "${bindir}/iecset" +FILES_alsa-utils-alsactl = "${sbindir}/alsactl */udev/rules.d */*/udev/rules.d ${systemd_unitdir} ${localstatedir}/lib/alsa ${datadir}/alsa/init/" +FILES_alsa-utils-aseqdump = "${bindir}/aseqdump" +FILES_alsa-utils-alsaloop = "${bindir}/alsaloop" +FILES_alsa-utils-alsaucm = "${bindir}/alsaucm" + + +SUMMARY_alsa-utils-aplay = "Play (and record) sound files using ALSA" +SUMMARY_alsa-utils-amixer = "Command-line control for ALSA mixer and settings" +SUMMARY_alsa-utils-alsamixer = "ncurses-based control for ALSA mixer and settings" +SUMMARY_alsa-utils-speakertest = "ALSA surround speaker test utility" +SUMMARY_alsa-utils-midi = "Miscellaneous MIDI utilities for ALSA" +SUMMARY_alsa-utils-aconnect = "ALSA sequencer connection manager" +SUMMARY_alsa-utils-aseqnet = "Network client/server for ALSA sequencer" +SUMMARY_alsa-utils-iecset = "ALSA utility for setting/showing IEC958 (S/PDIF) status bits" +SUMMARY_alsa-utils-alsactl = "Saves/restores ALSA-settings in /etc/asound.state" +SUMMARY_alsa-utils-aseqdump = "Shows the events received at an ALSA sequencer port" +SUMMARY_alsa-utils-alsaloop = "ALSA PCM loopback utility" +SUMMARY_alsa-utils-alsaucm = "ALSA Use Case Manager" + +RRECOMMENDS_alsa-utils-alsactl = "alsa-states" + +ALLOW_EMPTY_alsa-utils = "1" + +do_install() { + autotools_do_install + + # We don't ship this here because it requires a dependency on bash. + # See alsa-utils-scripts_${PV}.bb + rm ${D}${sbindir}/alsaconf + rm ${D}${sbindir}/alsa-info.sh + + if ${@bb.utils.contains('PACKAGECONFIG', 'udev', 'false', 'true', d)}; then + # This is where alsa-utils will install its rules if we don't tell it anything else. + rm -rf ${D}/lib/udev + rmdir --ignore-fail-on-non-empty ${D}/lib + fi +} diff --git a/yocto-poky/meta/recipes-multimedia/flac/flac_1.3.1.bb b/yocto-poky/meta/recipes-multimedia/flac/flac_1.3.1.bb new file mode 100644 index 000000000..f25271f87 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/flac/flac_1.3.1.bb @@ -0,0 +1,42 @@ +SUMMARY = "Free Lossless Audio Codec" +DESCRIPTION = "FLAC stands for Free Lossless Audio Codec, a lossless audio compression format." +HOMEPAGE = "https://xiph.org/flac/" +BUGTRACKER = "http://sourceforge.net/p/flac/bugs/" +SECTION = "libs" +LICENSE = "GFDL-1.2 & GPLv2+ & LGPLv2.1+ & BSD" +LIC_FILES_CHKSUM = "file://COPYING.FDL;md5=ad1419ecc56e060eccf8184a87c4285f \ + file://src/Makefile.am;beginline=1;endline=17;md5=0a853b81d9d43d8aad3b53b05cfcc37e \ + file://COPYING.GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://src/flac/main.c;beginline=1;endline=18;md5=d03a766558d233f9cc3ac5dfafd49deb \ + file://COPYING.LGPL;md5=fbc093901857fcd118f065f900982c24 \ + file://src/plugin_common/all.h;beginline=1;endline=18;md5=7c8a3b9e1e66ed0aba765bc6f35da85d \ + file://COPYING.Xiph;md5=a2c4b71c0198682376d483eb5bcc9197 \ + file://include/FLAC/all.h;beginline=65;endline=70;md5=64474f2b22e9e77b28d8b8b25c983a48" +DEPENDS = "libogg" + +SRC_URI = "http://downloads.xiph.org/releases/flac/${BP}.tar.xz" + +SRC_URI[md5sum] = "b9922c9a0378c88d3e901b234f852698" +SRC_URI[sha256sum] = "4773c0099dba767d963fd92143263be338c48702172e8754b9bc5103efe1c56c" + +inherit autotools gettext + +EXTRA_OECONF = "--disable-oggtest \ + --with-ogg-libraries=${STAGING_LIBDIR} \ + --with-ogg-includes=${STAGING_INCDIR} \ + --disable-xmms-plugin \ + --without-libiconv-prefix \ + ac_cv_prog_NASM="" \ + " + +EXTRA_OECONF += "${@bb.utils.contains("TUNE_FEATURES", "altivec", " --enable-altivec", " --disable-altivec", d)}" +EXTRA_OECONF += "${@bb.utils.contains("TUNE_FEATURES", "core2", " --enable-sse", "", d)}" +EXTRA_OECONF += "${@bb.utils.contains("TUNE_FEATURES", "corei7", " --enable-sse", "", d)}" + +PACKAGES += "libflac libflac++ liboggflac liboggflac++" +FILES_${PN} = "${bindir}/*" +FILES_libflac = "${libdir}/libFLAC.so.*" +FILES_libflac++ = "${libdir}/libFLAC++.so.*" +FILES_liboggflac = "${libdir}/libOggFLAC.so.*" +FILES_liboggflac++ = "${libdir}/libOggFLAC++.so.*" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/Add-error-signal-emission-for-missing-plugins.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/Add-error-signal-emission-for-missing-plugins.patch new file mode 100644 index 000000000..712d46daa --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/Add-error-signal-emission-for-missing-plugins.patch @@ -0,0 +1,252 @@ +From d64c7edb66f4a64ff49c4306cf77fd269b7079ab Mon Sep 17 00:00:00 2001 +From: Jussi Kukkonen <jussi.kukkonen@intel.com> +Date: Mon, 16 Mar 2015 13:45:30 +0200 +Subject: [PATCH] Add error signal emission for missing plugins + +Add a missing plugins error signal to gst-player. Note that this error +does not necessarily mean the playback has completely failed, but in +practice the user experience will be bad (think, e.g. of a mp4 file +where H.264 codec is missing: AAC playback still works...). + +Use the signal in gtk-play to show a infobar if plugins are missing. + +Submitted upstream at https://github.com/sdroege/gst-player/pull/11 + +Upstream-Status: Submitted +Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com> +--- + configure.ac | 2 +- + gtk/gtk-play.c | 54 +++++++++++++++++++++++++++++++++++++++++++++- + lib/gst/player/gstplayer.c | 22 +++++++++++++++++++ + lib/gst/player/gstplayer.h | 3 ++- + 4 files changed, 78 insertions(+), 3 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 90ab74c..6cdb4eb 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -53,7 +53,7 @@ AC_SUBST(LT_AGE) + PKG_PROG_PKG_CONFIG + + PKG_CHECK_MODULES(GLIB, [glib-2.0 gobject-2.0]) +-PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0 >= 1.4 gstreamer-video-1.0 >= 1.4]) ++PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0 >= 1.4 gstreamer-video-1.0 >= 1.4 gstreamer-pbutils-1.0]) + + GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`" + AC_SUBST(GLIB_PREFIX) +diff --git a/gtk/gtk-play.c b/gtk/gtk-play.c +index b92773b..e2b605a 100644 +--- a/gtk/gtk-play.c ++++ b/gtk/gtk-play.c +@@ -30,6 +30,8 @@ typedef struct + GtkWidget *prev_button, *next_button; + GtkWidget *seekbar; + GtkWidget *video_area; ++ GtkWidget *info_label; ++ GtkWidget *info_bar; + GtkWidget *volume_button; + gulong seekbar_value_changed_signal_id; + gboolean playing; +@@ -141,6 +143,13 @@ play_pause_clicked_cb (GtkButton * button, GtkPlay * play) + } + + static void ++clear_missing_plugins (GtkPlay * play) ++{ ++ gtk_label_set_text (GTK_LABEL (play->info_label), ""); ++ gtk_widget_hide (play->info_bar); ++} ++ ++static void + skip_prev_clicked_cb (GtkButton * button, GtkPlay * play) + { + GList *prev; +@@ -155,6 +164,7 @@ skip_prev_clicked_cb (GtkButton * button, GtkPlay * play) + + gtk_widget_set_sensitive (play->next_button, TRUE); + gst_player_set_uri (play->player, prev->data); ++ clear_missing_plugins (play); + gst_player_play (play->player); + set_title (play, prev->data); + gtk_widget_set_sensitive (play->prev_button, g_list_previous (prev) != NULL); +@@ -175,6 +185,7 @@ skip_next_clicked_cb (GtkButton * button, GtkPlay * play) + + gtk_widget_set_sensitive (play->prev_button, TRUE); + gst_player_set_uri (play->player, next->data); ++ clear_missing_plugins (play); + gst_player_play (play->player); + set_title (play, next->data); + gtk_widget_set_sensitive (play->next_button, g_list_next (next) != NULL); +@@ -193,10 +204,16 @@ volume_changed_cb (GtkScaleButton * button, gdouble value, GtkPlay * play) + gst_player_set_volume (play->player, value); + } + ++void ++info_bar_response_cb (GtkInfoBar * bar, gint response, GtkPlay * play) ++{ ++ gtk_widget_hide (GTK_WIDGET (bar)); ++} ++ + static void + create_ui (GtkPlay * play) + { +- GtkWidget *controls, *main_hbox, *main_vbox; ++ GtkWidget *controls, *main_hbox, *main_vbox, *info_bar, *content_area; + + play->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + g_signal_connect (G_OBJECT (play->window), "delete-event", +@@ -208,6 +225,20 @@ create_ui (GtkPlay * play) + g_signal_connect (play->video_area, "realize", + G_CALLBACK (video_area_realize_cb), play); + ++ play->info_bar = gtk_info_bar_new (); ++ gtk_info_bar_set_message_type (GTK_INFO_BAR (play->info_bar), ++ GTK_MESSAGE_WARNING); ++ //gtk_info_bar_set_show_close_button (GTK_INFO_BAR (play->info_bar), ++ // TRUE); ++ gtk_widget_set_no_show_all (play->info_bar, TRUE); ++ g_signal_connect (play->info_bar, "response", ++ G_CALLBACK (info_bar_response_cb), play); ++ ++ content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (play->info_bar)); ++ play->info_label = gtk_label_new (""); ++ gtk_container_add (GTK_CONTAINER (content_area), play->info_label); ++ gtk_widget_show (play->info_label); ++ + /* Unified play/pause button */ + play->play_pause_button = + gtk_button_new_from_icon_name ("media-playback-pause", +@@ -258,6 +289,7 @@ create_ui (GtkPlay * play) + + main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), main_hbox, TRUE, TRUE, 0); ++ gtk_box_pack_start (GTK_BOX (main_vbox), play->info_bar, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (main_vbox), controls, FALSE, FALSE, 0); + gtk_container_add (GTK_CONTAINER (play->window), main_vbox); + +@@ -322,6 +354,7 @@ eos_cb (GstPlayer * unused, GtkPlay * play) + gtk_widget_set_sensitive (play->next_button, g_list_next (next) != NULL); + + gst_player_set_uri (play->player, next->data); ++ clear_missing_plugins (play); + gst_player_play (play->player); + set_title (play, next->data); + } else { +@@ -330,6 +363,24 @@ eos_cb (GstPlayer * unused, GtkPlay * play) + } + } + ++static void ++error_cb (GstPlayer * player, GError * err, GtkPlay * play) ++{ ++ char *message; ++ ++ if (g_error_matches (err, gst_player_error_quark (), ++ GST_PLAYER_ERROR_MISSING_PLUGIN)) { ++ // add message to end of any existing message: there may be ++ // multiple missing plugins. ++ message = g_strdup_printf ("%s%s. ", ++ gtk_label_get_text (GTK_LABEL (play->info_label)), err->message); ++ gtk_label_set_text (GTK_LABEL (play->info_label), message); ++ g_free (message); ++ ++ gtk_widget_show (play->info_bar); ++ } ++} ++ + int + main (gint argc, gchar ** argv) + { +@@ -422,6 +473,7 @@ main (gint argc, gchar ** argv) + g_signal_connect (play.player, "video-dimensions-changed", + G_CALLBACK (video_dimensions_changed_cb), &play); + g_signal_connect (play.player, "end-of-stream", G_CALLBACK (eos_cb), &play); ++ g_signal_connect (play.player, "error", G_CALLBACK (error_cb), &play); + + /* We have file(s) that need playing. */ + set_title (&play, g_list_first (play.uris)->data); +diff --git a/lib/gst/player/gstplayer.c b/lib/gst/player/gstplayer.c +index bd682d9..78e7ba1 100644 +--- a/lib/gst/player/gstplayer.c ++++ b/lib/gst/player/gstplayer.c +@@ -47,6 +47,7 @@ + + #include <gst/gst.h> + #include <gst/video/video.h> ++#include <gst/pbutils/missing-plugins.h> + + GST_DEBUG_CATEGORY_STATIC (gst_player_debug); + #define GST_CAT_DEFAULT gst_player_debug +@@ -238,6 +239,7 @@ gst_player_class_init (GstPlayerClass * klass) + g_signal_new ("video-dimensions-changed", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL, + NULL, NULL, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT); ++ + } + + static void +@@ -619,6 +621,21 @@ error_cb (GstBus * bus, GstMessage * msg, gpointer user_data) + g_mutex_unlock (&self->priv->lock); + } + ++static void ++element_cb (GstBus * bus, GstMessage * msg, gpointer user_data) ++{ ++ GstPlayer *self = GST_PLAYER (user_data); ++ ++ if (gst_is_missing_plugin_message (msg)) { ++ gchar *desc; ++ ++ desc = gst_missing_plugin_message_get_description (msg); ++ emit_error (self, g_error_new (GST_PLAYER_ERROR, ++ GST_PLAYER_ERROR_MISSING_PLUGIN, "Missing plugin '%s'", desc)); ++ g_free (desc); ++ } ++} ++ + static gboolean + eos_dispatch (gpointer user_data) + { +@@ -1059,6 +1076,8 @@ gst_player_main (gpointer data) + NULL, NULL); + g_source_attach (bus_source, self->priv->context); + ++ g_signal_connect (G_OBJECT (bus), "message::element", ++ G_CALLBACK (element_cb), self); + g_signal_connect (G_OBJECT (bus), "message::error", G_CALLBACK (error_cb), + self); + g_signal_connect (G_OBJECT (bus), "message::eos", G_CALLBACK (eos_cb), self); +@@ -1560,6 +1579,7 @@ gst_player_error_get_type (void) + static gsize id = 0; + static const GEnumValue values[] = { + {C_ENUM (GST_PLAYER_ERROR_FAILED), "GST_PLAYER_ERROR_FAILED", "failed"}, ++ {C_ENUM (GST_PLAYER_ERROR_MISSING_PLUGIN), "GST_PLAYER_ERROR_MISSING_PLUGIN", "missing-plugin"}, + {0, NULL, NULL} + }; + +@@ -1577,6 +1597,8 @@ gst_player_error_get_name (GstPlayerError error) + switch (error) { + case GST_PLAYER_ERROR_FAILED: + return "failed"; ++ case GST_PLAYER_ERROR_MISSING_PLUGIN: ++ return "missing-plugin"; + } + + g_assert_not_reached (); +diff --git a/lib/gst/player/gstplayer.h b/lib/gst/player/gstplayer.h +index c438513..35fb5bb 100644 +--- a/lib/gst/player/gstplayer.h ++++ b/lib/gst/player/gstplayer.h +@@ -44,7 +44,8 @@ GType gst_player_error_get_type (void); + #define GST_TYPE_PLAYER_ERROR (gst_player_error_get_type ()) + + typedef enum { +- GST_PLAYER_ERROR_FAILED = 0 ++ GST_PLAYER_ERROR_FAILED = 0, ++ GST_PLAYER_ERROR_MISSING_PLUGIN + } GstPlayerError; + + const gchar *gst_player_error_get_name (GstPlayerError error); +-- +2.1.4 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/Fix-pause-play.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/Fix-pause-play.patch new file mode 100644 index 000000000..783c42ad7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/Fix-pause-play.patch @@ -0,0 +1,107 @@ +Fix pause/play + +The current player state is now notified via the state-changed signal, +and in the GTK UI it was only used to keep track of the desired state. + +This is a backport of upstream commit 738479c7a0. + +Upstream-Status: Backport +Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com> + +--- + gtk/gtk-play.c | 8 ++++++-- + lib/gst/player/gstplayer.c | 12 ------------ + lib/gst/player/gstplayer.h | 2 -- + 3 files changed, 6 insertions(+), 16 deletions(-) + +diff --git a/gtk/gtk-play.c b/gtk/gtk-play.c +index 6e7a098..e2b605a 100644 +--- a/gtk/gtk-play.c ++++ b/gtk/gtk-play.c +@@ -34,6 +34,7 @@ typedef struct + GtkWidget *info_bar; + GtkWidget *volume_button; + gulong seekbar_value_changed_signal_id; ++ gboolean playing; + } GtkPlay; + + /* Compat stubs */ +@@ -118,12 +119,13 @@ play_pause_clicked_cb (GtkButton * button, GtkPlay * play) + { + GtkWidget *image; + +- if (gst_player_is_playing (play->player)) { ++ if (play->playing) { + gst_player_pause (play->player); + image = + gtk_image_new_from_icon_name ("media-playback-start", + GTK_ICON_SIZE_BUTTON); + gtk_button_set_image (GTK_BUTTON (play->play_pause_button), image); ++ play->playing = FALSE; + } else { + gchar *title; + +@@ -136,6 +138,7 @@ play_pause_clicked_cb (GtkButton * button, GtkPlay * play) + title = gst_player_get_uri (play->player); + set_title (play, title); + g_free (title); ++ play->playing = TRUE; + } + } + +@@ -335,7 +338,7 @@ video_dimensions_changed_cb (GstPlayer * unused, gint width, gint height, + static void + eos_cb (GstPlayer * unused, GtkPlay * play) + { +- if (gst_player_is_playing (play->player)) { ++ if (play->playing) { + GList *next = NULL; + gchar *uri; + +@@ -452,6 +455,7 @@ main (gint argc, gchar ** argv) + } + + play.player = gst_player_new (); ++ play.playing = TRUE; + + g_object_set (play.player, "dispatch-to-main-context", TRUE, NULL); + +diff --git a/lib/gst/player/gstplayer.c b/lib/gst/player/gstplayer.c +index 069b284..78e7ba1 100644 +--- a/lib/gst/player/gstplayer.c ++++ b/lib/gst/player/gstplayer.c +@@ -1422,18 +1422,6 @@ gst_player_set_uri (GstPlayer * self, const gchar * val) + g_object_set (self, "uri", val, NULL); + } + +-gboolean +-gst_player_is_playing (GstPlayer * self) +-{ +- gboolean val; +- +- g_return_val_if_fail (GST_IS_PLAYER (self), FALSE); +- +- g_object_get (self, "is-playing", &val, NULL); +- +- return val; +-} +- + GstClockTime + gst_player_get_position (GstPlayer * self) + { +diff --git a/lib/gst/player/gstplayer.h b/lib/gst/player/gstplayer.h +index 6933dd7..35fb5bb 100644 +--- a/lib/gst/player/gstplayer.h ++++ b/lib/gst/player/gstplayer.h +@@ -93,8 +93,6 @@ gchar * gst_player_get_uri (GstPlayer * player); + void gst_player_set_uri (GstPlayer * player, + const gchar * uri); + +-gboolean gst_player_is_playing (GstPlayer * player); +- + GstClockTime gst_player_get_position (GstPlayer * player); + GstClockTime gst_player_get_duration (GstPlayer * player); + +-- +2.1.4 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/filechooser.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/filechooser.patch new file mode 100644 index 000000000..7bf1b034b --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/filechooser.patch @@ -0,0 +1,54 @@ +Upstream-Status: Submitted +Signed-off-by: Ross Burton <ross.burton@intel.com> + +From 43d4b19ab611d844156e26c4840cc54ddb73ae03 Mon Sep 17 00:00:00 2001 +From: Ross Burton <ross.burton@intel.com> +Date: Thu, 26 Feb 2015 17:17:05 +0000 +Subject: [PATCH] gtk-play: show a file chooser if no URIs were passed + +--- + gtk/gtk-play.c | 28 ++++++++++++++++++++++++++-- + 1 file changed, 26 insertions(+), 2 deletions(-) + +diff --git a/gtk/gtk-play.c b/gtk/gtk-play.c +index f015077..9766a72 100644 +--- a/gtk/gtk-play.c ++++ b/gtk/gtk-play.c +@@ -319,8 +319,32 @@ main (gint argc, gchar ** argv) + // FIXME: Add support for playlists and stuff + /* Parse the list of the file names we have to play. */ + if (!file_names) { +- g_print ("Usage: %s FILE(s)|URI(s)\n", APP_NAME); +- return 1; ++ GtkWidget *chooser; ++ int res; ++ ++ chooser = gtk_file_chooser_dialog_new ("Select files to play", NULL, ++ GTK_FILE_CHOOSER_ACTION_OPEN, ++ "_Cancel", GTK_RESPONSE_CANCEL, ++ "_Open", GTK_RESPONSE_ACCEPT, ++ NULL); ++ g_object_set (chooser, ++ "local-only", FALSE, ++ "select-multiple", TRUE, ++ NULL); ++ ++ res = gtk_dialog_run (GTK_DIALOG (chooser)); ++ if (res == GTK_RESPONSE_ACCEPT) { ++ GSList *l; ++ ++ l = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (chooser)); ++ while (l) { ++ play.uris = g_list_append (play.uris, l->data); ++ l = g_slist_delete_link (l, l); ++ } ++ } else { ++ return 0; ++ } ++ gtk_widget_destroy (chooser); + } else { + guint i; + +-- +1.7.10.4 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/gst-player.desktop b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/gst-player.desktop new file mode 100644 index 000000000..9fd207b38 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/gst-player.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Media Player +Comment=Basic media player +Icon=audio-player +TryExec=gtk-play +Exec=gtk-play +StartupNotify=true +Terminal=false +Type=Application +Categories=GTK;AudioVideo; diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/gtk2.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/gtk2.patch new file mode 100644 index 000000000..2cd18bbc9 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player/gtk2.patch @@ -0,0 +1,71 @@ +As the rest of Sato is GTK+ 2, patch gtk-play to use GTK+ 2. When the rest of +Sato has been ported to GTK+ 3 this patch can be dropped. + +Upstream-Status: Inappropriate +Signed-off-by: Ross Burton <ross.burton@intel.com> + + +diff --git a/configure.ac b/configure.ac +index b8af13b..90ab74c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -60,7 +60,7 @@ AC_SUBST(GLIB_PREFIX) + GST_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-1.0`" + AC_SUBST(GST_PREFIX) + +-PKG_CHECK_MODULES(GTK, [gtk+-3.0], [have_gtk="yes"], [have_gtk="no"]) ++PKG_CHECK_MODULES(GTK, [gtk+-2.0], [have_gtk="yes"], [have_gtk="no"]) + AM_CONDITIONAL(HAVE_GTK, test "x$have_gtk" != "xno") + + GOBJECT_INTROSPECTION_CHECK([1.31.1]) +diff --git a/gtk/gtk-play.c b/gtk/gtk-play.c +index f015077..954d6fb 100644 +--- a/gtk/gtk-play.c ++++ b/gtk/gtk-play.c +@@ -34,6 +34,46 @@ typedef struct + gulong seekbar_value_changed_signal_id; + } GtkPlay; + ++/* Compat stubs */ ++GtkWidget * ++gtk_box_new (GtkOrientation orientation, ++ gint spacing) ++{ ++ switch (orientation) { ++ case GTK_ORIENTATION_HORIZONTAL: ++ return gtk_hbox_new (FALSE, spacing); ++ case GTK_ORIENTATION_VERTICAL: ++ return gtk_vbox_new (FALSE, spacing); ++ } ++} ++ ++GtkWidget* ++gtk_button_new_from_icon_name (const gchar *icon_name, ++ GtkIconSize size) ++{ ++ GtkWidget *button; ++ GtkWidget *image; ++ ++ image = gtk_image_new_from_icon_name (icon_name, size); ++ button = g_object_new (GTK_TYPE_BUTTON, ++ "image", image, ++ NULL); ++ return button; ++} ++ ++GtkWidget * ++gtk_scale_new_with_range (GtkOrientation orientation, ++ gdouble min, ++ gdouble max, ++ gdouble step) ++{ ++ switch (orientation) { ++ case GTK_ORIENTATION_HORIZONTAL: ++ return gtk_hscale_new_with_range (min, max, step); ++ case GTK_ORIENTATION_VERTICAL: ++ return gtk_vscale_new_with_range (min, max, step); ++ } ++} + + static void + set_title (GtkPlay * play, const gchar * title) diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player_git.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player_git.bb new file mode 100644 index 000000000..54cfbbc92 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-player_git.bb @@ -0,0 +1,38 @@ +SUMMARY="GStreamer playback helper library and examples" + +LICENSE = "LGPL-2.0+" +LIC_FILES_CHKSUM = "file://lib/gst/player/gstplayer.c;beginline=1;endline=19;md5=03aeca9d8295f811817909075a15ff65" + +DEPENDS = "glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base gtk+" + +SRC_URI = "git://github.com/sdroege/gst-player.git \ + file://filechooser.patch \ + file://gtk2.patch \ + file://Fix-pause-play.patch \ + file://Add-error-signal-emission-for-missing-plugins.patch \ + file://gst-player.desktop" + +SRCREV = "5386c5b984d40ef5434673ed62204e69aaf52645" + +S = "${WORKDIR}/git" + +inherit autotools gtk-doc lib_package pkgconfig + +do_configure_prepend() { + touch ${S}/ChangeLog +} + +EXTRA_OECONF += "ac_cv_path_VALGRIND=no ac_cv_path_GDB=no" + +do_install_append() { + install -m 0644 -D ${WORKDIR}/gst-player.desktop ${D}${datadir}/applications/gst-player.desktop +} + +FILES_${PN}-bin += "${datadir}/applications/*.desktop" + +RDEPENDS_${PN}-bin = "gstreamer1.0-plugins-base-playback" +RRECOMMENDS_${PN}-bin = "gstreamer1.0-plugins-base-meta \ + gstreamer1.0-plugins-good-meta \ + gstreamer1.0-plugins-bad-meta \ + ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-libav", "", d)} \ + ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-plugins-ugly-meta", "", d)}" diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gst-plugins-package.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-plugins-package.inc new file mode 100644 index 000000000..cb1be06d0 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gst-plugins-package.inc @@ -0,0 +1,58 @@ +PACKAGESPLITFUNCS_prepend = " split_gstreamer10_packages " +PACKAGESPLITFUNCS_append = " set_metapkg_rdepends " + +python split_gstreamer10_packages () { + gst_libdir = d.expand('${libdir}/gstreamer-${LIBV}') + postinst = d.getVar('plugin_postinst', True) + glibdir = d.getVar('libdir', True) + + do_split_packages(d, glibdir, '^lib(.*)\.so\.*', 'lib%s', 'gstreamer %s library', extra_depends='', allow_links=True) + do_split_packages(d, gst_libdir, 'libgst(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer plugin for %s', postinst=postinst, extra_depends='') + do_split_packages(d, gst_libdir, 'libgst(.*)\.la$', d.expand('${PN}-%s-dev'), 'GStreamer plugin for %s (development files)', extra_depends=d.expand('${PN}-dev')) + do_split_packages(d, gst_libdir, 'libgst(.*)\.a$', d.expand('${PN}-%s-staticdev'), 'GStreamer plugin for %s (static development files)', extra_depends=d.expand('${PN}-staticdev')) +} + +python set_metapkg_rdepends () { + import os + + pn = d.getVar('PN', True) + metapkg = pn + '-meta' + d.setVar('ALLOW_EMPTY_' + metapkg, "1") + d.setVar('FILES_' + metapkg, "") + blacklist = [ pn, pn + '-locale', pn + '-dev', pn + '-dbg', pn + '-doc', pn + '-meta' ] + metapkg_rdepends = [] + packages = d.getVar('PACKAGES', True).split() + pkgdest = d.getVar('PKGDEST', True) + for pkg in packages[1:]: + if not pkg in blacklist and not pkg in metapkg_rdepends and not pkg.endswith('-dev') and not pkg.endswith('-dbg') and not pkg.count('locale') and not pkg.count('-staticdev'): + # See if the package is empty by looking at the contents of its PKGDEST subdirectory. + # If this subdirectory is empty, then the package is. + # Empty packages do not get added to the meta package's RDEPENDS + pkgdir = os.path.join(pkgdest, pkg) + if os.path.exists(pkgdir): + dir_contents = os.listdir(pkgdir) or [] + else: + dir_contents = [] + is_empty = len(dir_contents) == 0 + if not is_empty: + metapkg_rdepends.append(pkg) + d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends)) + d.setVar('DESCRIPTION_' + metapkg, pn + ' meta package') +} + +# each plugin-dev depends on PN-dev, plugin-staticdev on PN-staticdev +# so we need them even when empty (like in gst-plugins-good case) +ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY_${PN}-dev = "1" +ALLOW_EMPTY_${PN}-staticdev = "1" + +PACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib" +FILES_${PN}-apps = "${bindir}" + +RDEPENDS_${PN}-apps += "perl" +RRECOMMENDS_${PN} += "${PN}-meta" + +FILES_${PN} = "" +FILES_${PN}-dbg += "${libdir}/gstreamer-${LIBV}/.debug" +FILES_${PN}-glib = "${datadir}/glib-2.0" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc new file mode 100644 index 000000000..84e6e95d3 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc @@ -0,0 +1,32 @@ +SUMMARY = "Libav-based GStreamer 1.x plugin" +SECTION = "multimedia" +LICENSE = "GPLv2+ & LGPLv2+ & ( (GPLv2+ & LGPLv2.1+) | (GPLv3+ & LGPLv3+) )" +LICENSE_FLAGS = "commercial" +HOMEPAGE = "http://www.gstreamer.net/" +DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base zlib bzip2" + +inherit autotools pkgconfig + +# CAUTION: Using the system libav is not recommended. Since the libav API is changing all the time, +# compilation errors (and other, more subtle bugs) can happen. It is usually better to rely on the +# libav copy included in the gst-libav package. +PACKAGECONFIG ??= " orc yasm " +PACKAGECONFIG[libav] = "--with-system-libav,,libav" +PACKAGECONFIG[lgpl] = "--enable-lgpl,," +PACKAGECONFIG[yasm] = "--enable-yasm,--disable-yasm,yasm-native" +PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc" + + +GSTREAMER_1_0_DEBUG ?= "--disable-debug" + +LIBAV_EXTRA_CONFIGURE = "--with-libav-extra-configure" +LIBAV_EXTRA_CONFIGURE_COMMON = \ +'${LIBAV_EXTRA_CONFIGURE}="${LIBAV_EXTRA_CONFIGURE_COMMON_ARG}"' + +EXTRA_OECONF = "${LIBAV_EXTRA_CONFIGURE_COMMON}" + +FILES_${PN} += "${libdir}/gstreamer-1.0/*.so" +FILES_${PN}-dbg += "${libdir}/gstreamer-1.0/.debug" +FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.la" +FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-Disable-yasm-for-libav-when-disable-yasm.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-Disable-yasm-for-libav-when-disable-yasm.patch new file mode 100644 index 000000000..1d99ad125 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-Disable-yasm-for-libav-when-disable-yasm.patch @@ -0,0 +1,33 @@ +From 54bba228ea52d01fd84941d97be23c03f9862b64 Mon Sep 17 00:00:00 2001 +From: Carlos Rafael Giani <dv@pseudoterminal.org> +Date: Sat, 6 Apr 2013 01:22:22 +0200 +Subject: [PATCH] Disable yasm for libav when --disable-yasm + +Upstream-Status: Inappropriate [configuration] + +Signed-off-by: Shane Wang <shane.wang@intel.com> +Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org> +--- + configure.ac | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 22ede88..ef3c050 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -305,6 +305,12 @@ else + emblibav_configure_args="$emblibav_configure_args --enable-gpl" + fi + ++ AC_ARG_ENABLE(yasm, ++ [AC_HELP_STRING([--disable-yasm], [disable use of yasm assembler])]) ++ if test "x$enable_yasm" = "xno"; then ++ emblibav_configure_args="$emblibav_configure_args --disable-yasm" ++ fi ++ + # if we are cross-compiling, tell libav so + case $host in + *android*) +-- +1.8.2 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/workaround-to-build-gst-libav-for-i586-with-gcc.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/workaround-to-build-gst-libav-for-i586-with-gcc.patch new file mode 100644 index 000000000..ccadea4d5 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav/workaround-to-build-gst-libav-for-i586-with-gcc.patch @@ -0,0 +1,26 @@ +Description: Workaround to build libav for i586 with gcc 4.9.2 by avoiding memset +Author: Bernhard Übelacker <bernhardu@vr-web.de> + +--- +Bug-Debian: https://bugs.debian.org/783082 +Last-Update: 2015-04-28 + +Upstream-Status: Backport [debian] + +Signed-off-by: Robert Yang <liezhi.yang@windriver.com> + +--- gst-libav-1.4.5.orig/gst-libs/ext/libav/libavcodec/h264_cabac.c ++++ gst-libav-1.4.5/gst-libs/ext/libav/libavcodec/h264_cabac.c +@@ -2020,7 +2020,11 @@ decode_intra_mb: + // In deblocking, the quantizer is 0 + h->cur_pic.qscale_table[mb_xy] = 0; + // All coeffs are present +- memset(h->non_zero_count[mb_xy], 16, 48); ++ /*memset(h->non_zero_count[mb_xy], 16, 48);*/ ++ /* avoiding this memset because it leads at least with gcc4.9.2 to error: 'asm' operand has impossible constraints */ ++ for (size_t i = 0; i < 48; i++) { ++ ( (unsigned char*)(h->non_zero_count[mb_xy]) ) [i] = 16; ++ } + h->cur_pic.mb_type[mb_xy] = mb_type; + h->last_qscale_diff = 0; + return 0; diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.4.5.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.4.5.bb new file mode 100644 index 000000000..97fc7ec3f --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.4.5.bb @@ -0,0 +1,27 @@ +include gstreamer1.0-libav.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \ + file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c \ + file://gst-libs/ext/libav/LICENSE;md5=ea66e97a7ac1db978cf3529068a8c948 \ + file://gst-libs/ext/libav/COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://gst-libs/ext/libav/COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \ + file://gst-libs/ext/libav/COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \ + file://gst-libs/ext/libav/COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02" + +SRC_URI = " \ + http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz \ + file://0001-Disable-yasm-for-libav-when-disable-yasm.patch \ + file://workaround-to-build-gst-libav-for-i586-with-gcc.patch \ +" +SRC_URI[md5sum] = "f4922a46adbcbe7bd01331ff5dc7979d" +SRC_URI[sha256sum] = "605c62624604f3bb5c870844cc1f2711779cc533b004c2aa1d8c0d58557afbbc" + +LIBAV_EXTRA_CONFIGURE_COMMON_ARG = "--target-os=linux \ + --cc='${CC}' --as='${CC}' --ld='${CC}' --nm='${NM}' --ar='${AR}' \ + --ranlib='${RANLIB}' \ + ${GSTREAMER_1_0_DEBUG} \ + --cross-prefix='${HOST_PREFIX}'" + +S = "${WORKDIR}/gst-libav-${PV}" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_git.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_git.bb new file mode 100644 index 000000000..bf1b87e6d --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_git.bb @@ -0,0 +1,29 @@ +DEFAULT_PREFERENCE = "-1" + +include gstreamer1.0-libav.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \ + file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c \ + file://gst-libs/ext/libav/LICENSE;md5=23a54f59b82572c203a559346e89ed57 \ + file://gst-libs/ext/libav/COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://gst-libs/ext/libav/COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \ + file://gst-libs/ext/libav/COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \ + file://gst-libs/ext/libav/COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02" + +SRC_URI = "git://anongit.freedesktop.org/gstreamer/gst-libav;branch=master" +S = "${WORKDIR}/git" + +SRCREV = "127202d6f65584891dabf92be031f0d170b0e7f1" + +LIBAV_EXTRA_CONFIGURE_COMMON_ARG = "--target-os=linux \ + --cc='${CC}' --as='${CC}' --ld='${CC}' --nm='${NM}' --ar='${AR}' \ + ${GSTREAMER_1_0_DEBUG} \ + --cross-prefix='${HOST_PREFIX}'" + +do_configure_prepend() { + cd ${S} + ./autogen.sh --noconfigure + cd ${B} +} + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb new file mode 100644 index 000000000..3ef10c372 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb @@ -0,0 +1,65 @@ +DESCRIPTION = "Gstreamer1.0 package groups" +LICENSE = "MIT" + +inherit packagegroup + +COMMERCIAL_PLUGINS = "${COMMERCIAL_AUDIO_PLUGINS} ${COMMERCIAL_VIDEO_PLUGINS}" +DEPENDS_UGLY="${@'gstreamer1.0-plugins-ugly' if 'ugly' in COMMERCIAL_PLUGINS.split('-') else ''}" +DEPENDS_BAD="${@'gstreamer1.0-plugins-bad' if 'bad' in COMMERCIAL_PLUGINS.split('-') else ''}" +DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good ${DEPENDS_UGLY} ${DEPENDS_BAD}" + +PACKAGES = "\ + gstreamer1.0-meta-base \ + gstreamer1.0-meta-x11-base \ + gstreamer1.0-meta-audio \ + gstreamer1.0-meta-debug \ + gstreamer1.0-meta-video" + +ALLOW_EMPTY_gstreamer1.0-meta-base = "1" +ALLOW_EMPTY_gstreamer1.0-meta-x11-base = "1" +ALLOW_EMPTY_gstreamer1.0-meta-audio = "1" +ALLOW_EMPTY_gstreamer1.0-meta-debug = "1" +ALLOW_EMPTY_gstreamer1.0-meta-video = "1" + +RDEPENDS_gstreamer1.0-meta-base = "\ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gstreamer1.0-meta-x11-base', '', d)} \ + gstreamer1.0 \ + gstreamer1.0-plugins-base-playback \ + gstreamer1.0-plugins-base-gio \ + gstreamer1.0-plugins-base-alsa \ + gstreamer1.0-plugins-base-volume \ + gstreamer1.0-plugins-base-audioconvert \ + gstreamer1.0-plugins-base-audioresample \ + gstreamer1.0-plugins-base-typefindfunctions \ + gstreamer1.0-plugins-base-videoscale \ + gstreamer1.0-plugins-base-videoconvert \ + gstreamer1.0-plugins-good-autodetect \ + gstreamer1.0-plugins-good-souphttpsrc" + +RRECOMMENDS_gstreamer1.0-meta-x11-base = "\ + gstreamer1.0-plugins-base-ximagesink \ + gstreamer1.0-plugins-base-xvimagesink" + +RDEPENDS_gstreamer1.0-meta-audio = "\ + gstreamer1.0-meta-base \ + gstreamer1.0-plugins-base-vorbis \ + gstreamer1.0-plugins-base-ogg \ + gstreamer1.0-plugins-good-wavparse \ + gstreamer1.0-plugins-good-flac \ + ${COMMERCIAL_AUDIO_PLUGINS}" + +RDEPENDS_gstreamer1.0-meta-debug = "\ + gstreamer1.0-meta-base \ + gstreamer1.0-plugins-good-debug \ + gstreamer1.0-plugins-base-audiotestsrc \ + gstreamer1.0-plugins-base-videotestsrc" + +RDEPENDS_gstreamer1.0-meta-video = "\ + gstreamer1.0-meta-base \ + gstreamer1.0-plugins-good-avi \ + gstreamer1.0-plugins-good-matroska \ + gstreamer1.0-plugins-base-theora \ + ${COMMERCIAL_VIDEO_PLUGINS}" + +RRECOMMENDS_gstreamer1.0-meta-video = "\ + gstreamer1.0-meta-audio" diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc new file mode 100644 index 000000000..d69890434 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc @@ -0,0 +1,42 @@ +SUMMARY = "OpenMAX IL plugins for GStreamer" +SECTION = "multimedia" +LICENSE = "LGPLv2.1" +LICENSE_FLAGS = "commercial" +HOMEPAGE = "http://www.gstreamer.net/" +DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad" +RDEPENDS_${PN} = "libomxil" + +inherit autotools pkgconfig gettext + +acpaths = "-I ${S}/common/m4 -I ${S}/m4" + +PR = "r1" + +GSTREAMER_1_0_OMX_TARGET ?= "bellagio" +GSTREAMER_1_0_OMX_CORE_NAME ?= "${libdir}/libomxil-bellagio.so.0" + +EXTRA_OECONF += "--disable-valgrind --with-omx-target=${GSTREAMER_1_0_OMX_TARGET}" + +python __anonymous () { + omx_target = d.getVar("GSTREAMER_1_0_OMX_TARGET", True) + if omx_target in ['generic', 'bellagio']: + srcdir = d.getVar("S", True) + # Bellagio headers are incomplete (they are missing the OMX_VERSION_MAJOR,# + # OMX_VERSION_MINOR, OMX_VERSION_REVISION, and OMX_VERSION_STEP macros); + # appending a directory path to gst-omx' internal OpenMAX IL headers fixes this + d.appendVar("CFLAGS", " -I%s/omx/openmax" % srcdir) + elif omx_target == "rpi": + # Dedicated Raspberry Pi OpenMAX IL support makes this package machine specific + d.setVar("PACKAGE_ARCH", d.getVar("MACHINE_ARCH", True)) +} + +set_omx_core_name() { + sed -i -e "s;^core-name=.*;core-name=${GSTREAMER_1_0_OMX_CORE_NAME};" "${D}${sysconfdir}/xdg/gstomx.conf" +} +do_install[postfuncs] += " set_omx_core_name " + +FILES_${PN} += "${libdir}/gstreamer-1.0/*.so" +FILES_${PN}-dbg += "${libdir}/gstreamer-1.0/.debug" +FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.la" +FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omx-fixed-type-error-in-printf-call.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omx-fixed-type-error-in-printf-call.patch new file mode 100644 index 000000000..a428ac9c9 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omx-fixed-type-error-in-printf-call.patch @@ -0,0 +1,30 @@ +From f629e041e9f678fcd86ad764a15117dff63c271c Mon Sep 17 00:00:00 2001 +From: Carlos Rafael Giani <dv@pseudoterminal.org> +Date: Sat, 27 Apr 2013 02:50:25 +0200 +Subject: [PATCH] omx: fixed type error in printf call + +%zu expects size_t + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=699008] + +Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org> +--- + omx/gstomx.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/omx/gstomx.c b/omx/gstomx.c +index a2945ed..1eca7cc 100644 +--- a/omx/gstomx.c ++++ b/omx/gstomx.c +@@ -1630,7 +1630,7 @@ gst_omx_port_allocate_buffers_unlocked (GstOMXPort * port, + + GST_INFO_OBJECT (comp->parent, + "Allocating %d buffers of size %zu for %s port %u", n, +- port->port_def.nBufferSize, comp->name, (guint) port->index); ++ (size_t) (port->port_def.nBufferSize), comp->name, (guint) port->index); + + if (!port->buffers) + port->buffers = g_ptr_array_sized_new (n); +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bb new file mode 100644 index 000000000..fe7c91cb3 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bb @@ -0,0 +1,12 @@ +include gstreamer1.0-omx.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \ + file://omx/gstomx.h;beginline=1;endline=21;md5=5c8e1fca32704488e76d2ba9ddfa935f" + +SRC_URI = "http://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz" + +SRC_URI[md5sum] = "d24e8c0153c35dfefee3e26b1c2c35f8" +SRC_URI[sha256sum] = "0b4874961e6488ad9e5808114bd486ea981c540907262caab1419355fd82d745" + +S = "${WORKDIR}/gst-omx-${PV}" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bb new file mode 100644 index 000000000..99c84668e --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bb @@ -0,0 +1,26 @@ +DEFAULT_PREFERENCE = "-1" + +include gstreamer1.0-omx.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \ + file://omx/gstomx.h;beginline=1;endline=21;md5=5c8e1fca32704488e76d2ba9ddfa935f" + +SRC_URI = " \ + git://anongit.freedesktop.org/gstreamer/gst-omx;branch=master;name=gst-omx \ + git://anongit.freedesktop.org/gstreamer/common;destsuffix=git/common;branch=master;name=common \ + file://0001-omx-fixed-type-error-in-printf-call.patch \ + " + +S = "${WORKDIR}/git" + +SRCREV_gst-omx = "a2db76b048db278ef0aa798e106b7594264e06c0" +SRCREV_common = "5edcd857b2107cd8b78c16232dd10877513ec157" + +SRCREV_FORMAT = "gst-omx" + +do_configure_prepend() { + cd ${S} + ./autogen.sh --noconfigure + cd ${B} +} + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc new file mode 100644 index 000000000..cdedb60b2 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc @@ -0,0 +1,135 @@ +require gstreamer1.0-plugins.inc + +LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ " + +DEPENDS += "gstreamer1.0-plugins-base libpng jpeg" + +S = "${WORKDIR}/gst-plugins-bad-${PV}" + +SRC_URI += "file://configure-allow-to-disable-libssh2.patch \ + " + +inherit gettext bluetooth + +# opengl packageconfig factored out to make it easy for distros +# and BSP layers to pick either (desktop) opengl, gles2, or no GL +PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2', '', d)}" + +PACKAGECONFIG ??= " \ + ${PACKAGECONFIG_GL} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'directfb', 'directfb', '', d)} \ + orc curl uvch264 neon sndfile \ + hls sbc dash bz2 smoothstreaming \ + " + +# dash = Dynamic Adaptive Streaming over HTTP +PACKAGECONFIG[assrender] = "--enable-assrender,--disable-assrender,libass" +PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl" +PACKAGECONFIG[gles2] = "--enable-gles2,--disable-gles2,virtual/libgles2" +PACKAGECONFIG[opengl] = "--enable-opengl,--disable-opengl,virtual/libgl libglu" +PACKAGECONFIG[faac] = "--enable-faac,--disable-faac,faac" +PACKAGECONFIG[faad] = "--enable-faad,--disable-faad,faad2" +PACKAGECONFIG[libmms] = "--enable-libmms,--disable-libmms,libmms" +PACKAGECONFIG[modplug] = "--enable-modplug,--disable-modplug,libmodplug" +PACKAGECONFIG[mpg123] = "--enable-mpg123,--disable-mpg123,mpg123" +PACKAGECONFIG[opus] = "--enable-opus,--disable-opus,libopus" +PACKAGECONFIG[flite] = "--enable-flite,--disable-flite,flite-alsa" +PACKAGECONFIG[opencv] = "--enable-opencv,--disable-opencv,opencv" +PACKAGECONFIG[wayland] = "--enable-wayland --enable-egl,--disable-wayland --disable-egl,wayland virtual/egl" +PACKAGECONFIG[uvch264] = "--enable-uvch264,--disable-uvch264,libusb1 udev" +PACKAGECONFIG[directfb] = "--enable-directfb,--disable-directfb,directfb" +PACKAGECONFIG[neon] = "--enable-neon,--disable-neon,neon" +PACKAGECONFIG[openal] = "--enable-openal,--disable-openal,openal-soft" +PACKAGECONFIG[hls] = "--enable-hls,--disable-hls,gnutls" +PACKAGECONFIG[sbc] = "--enable-sbc,--disable-sbc,sbc" +PACKAGECONFIG[dash] = "--enable-dash,--disable-dash,libxml2" +PACKAGECONFIG[bz2] = "--enable-bz2,--disable-bz2,bzip2" +PACKAGECONFIG[fluidsynth] = "--enable-fluidsynth,--disable-fluidsynth,fluidsynth" +PACKAGECONFIG[schroedinger] = "--enable-schro,--disable-schro,schroedinger" +PACKAGECONFIG[smoothstreaming] = "--enable-smoothstreaming,--disable-smoothstreaming,libxml2" +PACKAGECONFIG[bluez] = "--enable-bluez,--disable-bluez,${BLUEZ}" +PACKAGECONFIG[rsvg] = "--enable-rsvg,--disable-rsvg,librsvg" +PACKAGECONFIG[sndfile] = "--enable-sndfile,--disable-sndfile,libsndfile1" +PACKAGECONFIG[webp] = "--enable-webp,--disable-webp,libwebp" +PACKAGECONFIG[rtmp] = "--enable-rtmp,--disable-rtmp,rtmpdump" +PACKAGECONFIG[libssh2] = "--enable-libssh2,--disable-libssh2,libssh2" + +# these plugins have not been ported to 1.0 (yet): +# directdraw vcd apexsink dc1394 lv2 linsys musepack mythtv +# nas timidity teletextdec sdl xvid wininet acm gsettings +# sndio qtwrapper cdxaparse dccp faceoverlay hdvparse tta +# mve nuvdemux osx_video patchdetect quicktime real sdi +# videomeasure gsettings + +# these plugins have no corresponding library in OE-core or meta-openembedded: +# openni2 winks direct3d directdraw directsound winscreencap osx_video +# apple_media android_media avc chromaprint daala dts gme gsm kate ladspa mimic +# mpeg2enc mplex ofa openjpeg opensles pvr resindvd rtmp soundtouch spandsp spc +# srtp vdpau voaacenc voamrwbenc wasapi zbar + +EXTRA_OECONF += " \ + --enable-dvb \ + --enable-shm \ + --enable-fbdev \ + --enable-decklink \ + --disable-acm \ + --disable-android_media \ + --disable-apexsink \ + --disable-apple_media \ + --disable-avc \ + --disable-chromaprint \ + --disable-cocoa \ + --disable-daala \ + --disable-dc1394 \ + --disable-direct3d \ + --disable-directdraw \ + --disable-directsound \ + --disable-dts \ + --disable-gme \ + --disable-gsettings \ + --disable-gsm \ + --disable-kate \ + --disable-ladspa \ + --disable-linsys \ + --disable-lv2 \ + --disable-mimic \ + --disable-mpeg2enc \ + --disable-mplex \ + --disable-musepack \ + --disable-mythtv \ + --disable-nas \ + --disable-ofa \ + --disable-openjpeg \ + --disable-opensles \ + --disable-osx_video \ + --disable-pvr \ + --disable-quicktime \ + --disable-resindvd \ + --disable-sdl \ + --disable-sdltest \ + --disable-sndio \ + --disable-soundtouch \ + --disable-spandsp \ + --disable-spc \ + --disable-srtp \ + --disable-teletextdec \ + --disable-timidity \ + --disable-vcd \ + --disable-vdpau \ + --disable-voaacenc \ + --disable-voamrwbenc \ + --disable-wasapi \ + --disable-wildmidi \ + --disable-wininet \ + --disable-winscreencap \ + --disable-xvid \ + --disable-zbar \ + ${@bb.utils.contains("TUNE_FEATURES", "mx32", "--disable-yadif", "", d)} \ + " + +ARM_INSTRUCTION_SET = "arm" + +FILES_gstreamer1.0-plugins-bad-opencv += "${datadir}/gst-plugins-bad/1.0/opencv*" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch new file mode 100644 index 000000000..042a32c04 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch @@ -0,0 +1,41 @@ +From deba0da45ec821209a7ed148a4521d562e6512cd Mon Sep 17 00:00:00 2001 +From: Carlos Rafael Giani <dv@pseudoterminal.org> +Date: Wed, 27 Aug 2014 14:47:25 +0200 +Subject: [PATCH] gl: do not check for GL/GLU/EGL/GLES2 libs if disabled in + configuration + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=735522] + +Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org> +--- + configure.ac | 14 ++++++++++---- + 1 file changed, 10 insertions(+), 4 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 1a46afb..e85d4ba 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -661,10 +661,16 @@ case $host in + fi + ;; + *) +- AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h) +- AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h) +- AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h) +- AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h) ++ if test "x$NEED_GL" != "xno"; then ++ AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h) ++ AG_GST_CHECK_LIBHEADER(GLU, GLU, gluSphere,, GL/glu.h) ++ fi ++ if test "x$NEED_GLES2" != "xno"; then ++ AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h) ++ fi ++ if test "x$NEED_EGL" != "xno"; then ++ AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h) ++ fi + + old_LIBS=$LIBS + old_CFLAGS=$CFLAGS +-- +1.8.3.2 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch new file mode 100644 index 000000000..d52afd5d5 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch @@ -0,0 +1,64 @@ +From f59c5269f92d59a5296cbfeeb682d42095cd88ad Mon Sep 17 00:00:00 2001 +From: Wenzong Fan <wenzong.fan@windriver.com> +Date: Thu, 18 Sep 2014 02:24:07 -0400 +Subject: [PATCH] gstreamer1.0-plugins-bad: allow to disable libssh2 + +libssh2 is automatically linked to if present, this undetermined +dependency may cause build errors like: + + .../x86_64-poky-linux/4.9.0/ld: cannot find -lssh2 + +libssh2 isn't an oe-core recipe, so allow to disable it from +configure. + +Upstream-Status: Pending + +Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com> +--- + configure.ac | 23 +++++++++++++++++------ + 1 file changed, 17 insertions(+), 6 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 0e95c5c..12153b4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1901,6 +1901,15 @@ AG_GST_CHECK_FEATURE(CHROMAPRINT, [chromaprint], chromaprint, [ + ]) + + dnl *** Curl *** ++AC_ARG_ENABLE([libssh2], ++ [ --enable-libssh2 enable LIBSSH2 support @<:@default=auto@:>@], ++ [case "${enableval}" in ++ yes) NEED_SSH2=yes ;; ++ no) NEED_SSH2=no ;; ++ auto) NEED_SSH2=auto ;; ++ *) AC_MSG_ERROR([bad value ${enableval} for --enable-libssh2]) ;; ++ esac],[NEED_SSH2=auto]) ++ + translit(dnm, m, l) AM_CONDITIONAL(USE_CURL, true) + AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [ + PKG_CHECK_MODULES(CURL, libcurl >= 7.21.0, [ +@@ -1915,12 +1924,14 @@ AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [ + ]) + AC_SUBST(CURL_CFLAGS) + AC_SUBST(CURL_LIBS) +- PKG_CHECK_MODULES(SSH2, libssh2 >= 1.4.3, [ +- HAVE_SSH2="yes" +- AC_DEFINE(HAVE_SSH2, 1, [Define if libssh2 is available]) +- ], [ +- HAVE_SSH2="no" +- ]) ++ if test "x$NEED_SSH2" != "xno"; then ++ PKG_CHECK_MODULES(SSH2, libssh2 >= 1.4.3, [ ++ HAVE_SSH2="yes" ++ AC_DEFINE(HAVE_SSH2, 1, [Define if libssh2 is available]) ++ ], [ ++ HAVE_SSH2="no" ++ ]) ++ fi + AM_CONDITIONAL(USE_SSH2, test "x$HAVE_SSH2" = "xyes") + AC_SUBST(SSH2_CFLAGS) + AC_SUBST(SSH2_LIBS) +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.4.5.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.4.5.bb new file mode 100644 index 000000000..59065de81 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.4.5.bb @@ -0,0 +1,14 @@ +include gstreamer1.0-plugins-bad.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=73a5855a8119deb017f5f13cf327095d \ + file://gst/tta/filters.h;beginline=12;endline=29;md5=8a08270656f2f8ad7bb3655b83138e5a \ + file://COPYING.LIB;md5=21682e4e8fea52413fd26c60acb907e5 \ + file://gst/tta/crc32.h;beginline=12;endline=29;md5=27db269c575d1e5317fffca2d33b3b50" + +SRC_URI += "file://0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch" + +SRC_URI[md5sum] = "e0bb39412cf4a48fe0397bcf3a7cd451" +SRC_URI[sha256sum] = "152fad7250683d72f9deb36c5685428338365fe4a4c87ffe15e38783b14f983c" + +S = "${WORKDIR}/gst-plugins-bad-${PV}" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_git.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_git.bb new file mode 100644 index 000000000..309505f7d --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_git.bb @@ -0,0 +1,26 @@ +DEFAULT_PREFERENCE = "-1" + +include gstreamer1.0-plugins-bad.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=73a5855a8119deb017f5f13cf327095d \ + file://gst/tta/filters.h;beginline=12;endline=29;md5=8a08270656f2f8ad7bb3655b83138e5a \ + file://COPYING.LIB;md5=21682e4e8fea52413fd26c60acb907e5 \ + file://gst/tta/crc32.h;beginline=12;endline=29;md5=27db269c575d1e5317fffca2d33b3b50" + +S = "${WORKDIR}/git" + +SRCREV = "6e5db57d2446a753aaa76bee268e1f95600b14ce" + +PACKAGECONFIG[sbc] = "--enable-sbc,--disable-sbc,sbc" +PACKAGECONFIG[hls] = "--enable-hls,--disable-hls,gnutls" + +EXTRA_OECONF += " \ + -disable-openjpeg \ + " + +do_configure_prepend() { + cd ${S} + ./autogen.sh --noconfigure + cd ${B} +} + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc new file mode 100644 index 000000000..47f3f4011 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc @@ -0,0 +1,39 @@ +require gstreamer1.0-plugins.inc + +LICENSE = "GPLv2+ & LGPLv2+" + +DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'virtual/libx11 libxv', '', d)}" +DEPENDS += "freetype liboil util-linux" + +inherit gettext + +PACKAGES_DYNAMIC =+ "^libgst.*" + +PACKAGECONFIG ??= " \ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \ + orc ivorbis ogg theora vorbis pango \ + " + +X11DEPENDS = "virtual/libx11 libsm libxrender" +X11ENABLEOPTS = "--enable-x --enable-xvideo --enable-xshm" +X11DISABLEOPTS = "--disable-x --disable-xvideo --disable-xshm" +PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}" +PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib" +PACKAGECONFIG[ivorbis] = "--enable-ivorbis,--disable-ivorbis,tremor" +PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libogg" +PACKAGECONFIG[theora] = "--enable-theora,--disable-theora,libtheora" +PACKAGECONFIG[vorbis] = "--enable-vorbis,--disable-vorbis,libvorbis" +PACKAGECONFIG[pango] = "--enable-pango,--disable-pango,pango" + + +# cdparanoia and libvisual do not seem to exist anywhere in OE +EXTRA_OECONF += " \ + --disable-freetypetest \ + --disable-cdparanoia \ + --disable-libvisual \ +" + +FILES_${MLPREFIX}libgsttag-1.0 += "${datadir}/gst-plugins-base/1.0/license-translations.dict" + +CACHED_CONFIGUREVARS_append_x86 = " ac_cv_header_emmintrin_h=no ac_cv_header_xmmintrin_h=no" diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch new file mode 100644 index 000000000..03dca956a --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch @@ -0,0 +1,129 @@ +From 3781d40940d46d7e6a502092d24aac7997f6da5b Mon Sep 17 00:00:00 2001 +From: Mingke Wang <mingke.wang@freescale.com> +Date: Thu, 5 Mar 2015 12:06:23 +0800 +Subject: [PATCH 1/4] basetextoverlay: make memory copy when video buffer's + memory is ready only + +1. since gst_buffer_make_writable just lookup the refcount to determine if + a buffer is writable, and it will use _gst_buffer_copy() which don't + perform a deep memory copy even if the flag of a memory is set to + GST_MEMORY_FLAG_READONLY. So, we detect the memory flag and use + gst_buffer_copy_region with GST_BUFFER_COPY_DEEP parameter to perform + deep memory copy. if the allocator of a memory don't support mem_copy + interface, the it will return NULL, if this case, we can use + gst_buffer_make_writable() to get a shared memory buffer or the orignal + buffer if the buffer's refcount is 1. +2. new feature is no added if caps has no feature during caps negotiation + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747495] + +Signed-off-by: Mingke Wang <mingke.wang@freescale.com> + +diff --git a/ext/pango/gstbasetextoverlay.c b/ext/pango/gstbasetextoverlay.c +index c919861..3c0a1d7 100755 +--- a/ext/pango/gstbasetextoverlay.c ++++ b/ext/pango/gstbasetextoverlay.c +@@ -747,6 +747,7 @@ gst_base_text_overlay_negotiate (GstBaseTextOverlay * overlay, GstCaps * caps) + if (f == NULL) { + f = gst_caps_features_new + (GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, NULL); ++ gst_caps_set_features(overlay_caps, 0, f); + } else { + gst_caps_features_add (f, + GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION); +@@ -1890,16 +1891,71 @@ gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay, + if (gst_pad_check_reconfigure (overlay->srcpad)) + gst_base_text_overlay_negotiate (overlay, NULL); + +- video_frame = gst_buffer_make_writable (video_frame); +- + if (overlay->attach_compo_to_buffer) { + GST_DEBUG_OBJECT (overlay, "Attaching text overlay image to video buffer"); ++ video_frame = gst_buffer_make_writable (video_frame); + gst_buffer_add_video_overlay_composition_meta (video_frame, + overlay->composition); + /* FIXME: emulate shaded background box if want_shading=true */ + goto done; + } + ++ gint m = gst_buffer_n_memory(video_frame); ++ gboolean mem_rdonly = FALSE; ++ GstMemory *mem; ++ GstBuffer *orig = video_frame; ++ ++ while (--m>=0) { ++ mem = gst_buffer_get_memory(video_frame, m); ++ if (GST_MEMORY_IS_READONLY(mem)) { ++ mem_rdonly = TRUE; ++ gst_memory_unref (mem); ++ break; ++ } ++ gst_memory_unref (mem); ++ } ++ ++ if (mem_rdonly) { ++ // since gst_buffer_make_writable just lookup the refcount to determine if ++ // a buffer is writable, and it will use _gst_buffer_copy() which don't ++ // perform a deep memory copy even if the flag of a memory is set to ++ // GST_MEMORY_FLAG_READONLY. So, we detect the memory flag and use ++ // gst_buffer_copy_region with GST_BUFFER_COPY_DEEP parameter to perform ++ // deep memory copy. if the allocator of a memory don't support mem_copy ++ // interface, the it will return NULL, if this case, we can use ++ // gst_buffer_make_writable() to get a shared memory buffer or the orignal ++ // buffer if the buffer's refcount is 1. ++ GstBuffer *new_buf = gst_buffer_copy_region (video_frame, ++ GST_BUFFER_COPY_ALL | GST_BUFFER_COPY_DEEP, 0, -1); ++ ++ GST_DEBUG_OBJECT (overlay, "copy %s video frame buffer %p -> %p", ++ g_type_name (GST_MINI_OBJECT_TYPE (video_frame)), video_frame, new_buf); ++ ++ if (!new_buf) { ++ //maybe the allocator don't support mem_copy interface, the we just use ++ //gst_buffer_make_writable() to get a writable buffer. ++ video_frame = gst_buffer_make_writable (video_frame); ++ } else { ++ gst_mini_object_unref (video_frame); ++ GST_BUFFER_FLAG_UNSET (new_buf, GST_BUFFER_FLAG_TAG_MEMORY); ++ video_frame = new_buf; ++ } ++ ++ if (!video_frame) { ++ GST_WARNING_OBJECT (overlay, "make writable buffer failed"); ++ return GST_FLOW_OK; ++ } ++ ++ m = gst_buffer_n_memory(video_frame); ++ while (--m>=0) { ++ mem = gst_buffer_get_memory(video_frame, m); ++ GST_MEMORY_FLAG_UNSET (mem, GST_MEMORY_FLAG_READONLY); ++ gst_memory_unref (mem); ++ } ++ } else { ++ video_frame = gst_buffer_make_writable (video_frame); ++ } ++ + if (!gst_video_frame_map (&frame, &overlay->info, video_frame, + GST_MAP_READWRITE)) + goto invalid_frame; +@@ -1918,6 +1974,18 @@ gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay, + + gst_video_frame_unmap (&frame); + ++ if (mem_rdonly && orig == video_frame) { ++ //if we used the original buffer and it's mem is set to read only, ++ //recover the memory ready only flag since we unset it before ++ // gst_video_frame_map () ++ m = gst_buffer_n_memory(video_frame); ++ while (--m>=0) { ++ mem = gst_buffer_get_memory(video_frame, m); ++ GST_MEMORY_FLAGS(mem) |= (GST_MEMORY_FLAG_READONLY); ++ gst_memory_unref (mem); ++ } ++ } ++ + done: + + return gst_pad_push (overlay->srcpad, video_frame); +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch new file mode 100644 index 000000000..3db4724fe --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch @@ -0,0 +1,26 @@ +From 269f642c45d85cfd630ed490478e6bd6b71a767f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com> +Date: Tue, 16 Sep 2014 01:07:18 +0300 +Subject: [PATCH] video-frame: Don't ref buffers twice when mapping + +Upstream-Status: Backport [1.5.1] +--- + gst-libs/gst/video/video-frame.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gst-libs/gst/video/video-frame.c b/gst-libs/gst/video/video-frame.c +index 01f23c0..8a9ae96 100644 +--- a/gst-libs/gst/video/video-frame.c ++++ b/gst-libs/gst/video/video-frame.c +@@ -105,7 +105,7 @@ gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info, + frame->data[i] = frame->map[0].data + info->offset[i]; + } + } +- frame->buffer = gst_buffer_ref (buffer); ++ frame->buffer = buffer; + if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0) + gst_buffer_ref (frame->buffer); + +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch new file mode 100644 index 000000000..39c146aad --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch @@ -0,0 +1,31 @@ +From 0a78555ea6c8c2f1ee27ee4707e8d7aa00ab7a66 Mon Sep 17 00:00:00 2001 +From: Mingke Wang <mingke.wang@freescale.com> +Date: Thu, 19 Mar 2015 14:15:25 +0800 +Subject: [PATCH 2/4] gstplaysink: don't set async of custom text-sink to + false + +set async to false lead to A/V sync problem when seeking. +the preroll need use GAP event instead of set async to false. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747499] + +Signed-off-by: Mingke Wang <mingke.wang@freescale.com> + +diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c +old mode 100644 +new mode 100755 +index f5a2d42..fba0172 +--- a/gst/playback/gstplaysink.c ++++ b/gst/playback/gstplaysink.c +@@ -2408,7 +2408,7 @@ gen_text_chain (GstPlaySink * playsink) + G_TYPE_BOOLEAN); + if (elem) { + /* make sure the sparse subtitles don't participate in the preroll */ +- g_object_set (elem, "async", FALSE, NULL); ++ //g_object_set (elem, "async", FALSE, NULL); + GST_DEBUG_OBJECT (playsink, "adding custom text sink"); + gst_bin_add (bin, chain->sink); + /* NOTE streamsynchronizer needs streams decoupled */ +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch new file mode 100644 index 000000000..c465b5cee --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch @@ -0,0 +1,87 @@ +From 40a293d44d1aeccf5eb8e86f23a0b13666111c5c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com> +Date: Fri, 12 Sep 2014 14:39:16 +0300 +Subject: [PATCH 2/3] video-frame: Add GST_VIDEO_FRAME_MAP_FLAG_NO_REF + +This makes sure that the buffer is not reffed another time when +storing it in the GstVideoFrame, keeping it writable if it was +writable. + +Upstream-Status: Backport [1.5.1] +https://bugzilla.gnome.org/show_bug.cgi?id=736118 +--- + gst-libs/gst/video/video-frame.c | 9 ++++++++- + gst-libs/gst/video/video-frame.h | 18 ++++++++++++++++++ + 2 files changed, 26 insertions(+), 1 deletion(-) + +diff --git a/gst-libs/gst/video/video-frame.c b/gst-libs/gst/video/video-frame.c +index 537cf70..01f23c0 100644 +--- a/gst-libs/gst/video/video-frame.c ++++ b/gst-libs/gst/video/video-frame.c +@@ -106,6 +106,9 @@ gst_video_frame_map_id (GstVideoFrame * frame, GstVideoInfo * info, + } + } + frame->buffer = gst_buffer_ref (buffer); ++ if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0) ++ gst_buffer_ref (frame->buffer); ++ + frame->meta = meta; + + /* buffer flags enhance the frame flags */ +@@ -189,11 +192,13 @@ gst_video_frame_unmap (GstVideoFrame * frame) + GstBuffer *buffer; + GstVideoMeta *meta; + gint i; ++ GstMapFlags flags; + + g_return_if_fail (frame != NULL); + + buffer = frame->buffer; + meta = frame->meta; ++ flags = frame->map[0].flags; + + if (meta) { + for (i = 0; i < frame->info.finfo->n_planes; i++) { +@@ -202,7 +207,9 @@ gst_video_frame_unmap (GstVideoFrame * frame) + } else { + gst_buffer_unmap (buffer, &frame->map[0]); + } +- gst_buffer_unref (buffer); ++ ++ if ((flags & GST_VIDEO_FRAME_MAP_FLAG_NO_REF) == 0) ++ gst_buffer_unref (frame->buffer); + } + + /** +diff --git a/gst-libs/gst/video/video-frame.h b/gst-libs/gst/video/video-frame.h +index 627fab0..f8e6304 100644 +--- a/gst-libs/gst/video/video-frame.h ++++ b/gst-libs/gst/video/video-frame.h +@@ -149,6 +149,24 @@ typedef enum { + GST_VIDEO_BUFFER_FLAG_LAST = (GST_BUFFER_FLAG_LAST << 8) + } GstVideoBufferFlags; + ++/** ++ * GstVideoBufferFlags: ++ * @GST_VIDEO_FRAME_MAP_FLAG_NO_REF: Don't take another reference of the buffer and store it in ++ * the GstVideoFrame. This makes sure that the buffer stays ++ * writable while the frame is mapped, but requires that the ++ * buffer reference stays valid until the frame is unmapped again. ++ * @GST_VIDEO_FRAME_MAP_FLAG_LAST: Offset to define more flags ++ * ++ * Additional mapping flags for gst_video_frame_map(). ++ * ++ * Since: 1.6 ++ */ ++typedef enum { ++ GST_VIDEO_FRAME_MAP_FLAG_NO_REF = (GST_MAP_FLAG_LAST << 0), ++ GST_VIDEO_FRAME_MAP_FLAG_LAST = (GST_MAP_FLAG_LAST << 8) ++ /* 8 more flags possible afterwards */ ++} GstVideoFrameMapFlags; ++ + G_END_DECLS + + #endif /* __GST_VIDEO_FRAME_H__ */ +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch new file mode 100644 index 000000000..9fbebd570 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch @@ -0,0 +1,225 @@ +From be6163cfa3a255493f9d75bad9541cbfe1723fee Mon Sep 17 00:00:00 2001 +From: Mingke Wang <mingke.wang@freescale.com> +Date: Thu, 19 Mar 2015 14:17:10 +0800 +Subject: [PATCH 3/4] ssaparse: enhance SSA text lines parsing. + +some parser will pass in the original ssa text line which starts with "Dialog:" +and there's are maybe multiple Dialog lines in one input buffer. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747496] + +Signed-off-by: Mingke Wang <mingke.wang@freescale.com> + +diff --git a/gst/subparse/gstssaparse.c b/gst/subparse/gstssaparse.c +old mode 100644 +new mode 100755 +index 06ecef9..0ab5dce +--- a/gst/subparse/gstssaparse.c ++++ b/gst/subparse/gstssaparse.c +@@ -260,6 +260,7 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt) + * gst_ssa_parse_push_line: + * @parse: caller element + * @txt: text to push ++ * @size: text size need to be parse + * @start: timestamp for the buffer + * @duration: duration for the buffer + * +@@ -269,27 +270,133 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt) + * Returns: result of the push of the created buffer + */ + static GstFlowReturn +-gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, ++gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, gint size, + GstClockTime start, GstClockTime duration) + { + GstFlowReturn ret; + GstBuffer *buf; +- gchar *t, *escaped; ++ gchar *t, *text, *p, *escaped, *p_start, *p_end; + gint num, i, len; ++ GstClockTime start_time = G_MAXUINT64, end_time = 0; + +- num = atoi (txt); +- GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT, +- num, GST_TIME_ARGS (start)); +- +- /* skip all non-text fields before the actual text */ ++ p = text = g_malloc(size + 1); ++ *p = '\0'; + t = txt; +- for (i = 0; i < 8; ++i) { +- t = strchr (t, ','); ++ ++ /* there are may have multiple dialogue lines at a time */ ++ while (*t) { ++ /* ignore leading white space characters */ ++ while (isspace(*t)) ++ t++; ++ ++ /* ignore Format: and Style: lines */ ++ if (strncmp(t, "Format:", 7) == 0 || strncmp(t, "Style:", 6) == 0) { ++ while (*t != '\0' && *t != '\n') { ++ t++; ++ } ++ } ++ ++ if (*t == '\0') ++ break; ++ ++ /* continue with next line */ ++ if (*t == '\n') { ++ t++; ++ continue; ++ } ++ ++ if(strncmp(t, "Dialogue:", 9) != 0) { ++ /* not started with "Dialogue:", it must be a line trimmed by demuxer */ ++ num = atoi (t); ++ GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT, ++ num, GST_TIME_ARGS (start)); ++ ++ /* skip all non-text fields before the actual text */ ++ for (i = 0; i < 8; ++i) { ++ t = strchr (t, ','); ++ if (t == NULL) ++ break; ++ ++t; ++ } ++ } else { ++ /* started with "Dialogue:", update timestamp and duration */ ++ /* time format are like Dialog:Mark,0:00:01.02,0:00:03.04,xx,xxx,... */ ++ guint hour, min, sec, msec, len; ++ GstClockTime tmp; ++ gchar t_str[12] = {0}; ++ ++ /* find the first ',' */ ++ p_start = strchr (t, ','); ++ if (p_start) ++ p_end = strchr (++p_start, ','); ++ ++ if (p_start && p_end) { ++ /* copy text between first ',' and second ',' */ ++ strncpy(t_str, p_start, p_end - p_start); ++ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) { ++ tmp = ((hour*3600) + (min*60) + sec) * GST_SECOND + msec*GST_MSECOND; ++ GST_DEBUG_OBJECT (parse, "Get start time:%02d:%02d:%02d:%03d\n", ++ hour, min, sec, msec); ++ if (start_time > tmp) ++ start_time = tmp; ++ } else { ++ GST_WARNING_OBJECT (parse, ++ "failed to parse ssa start timestamp string :%s", t_str); ++ } ++ ++ p_start = p_end; ++ p_end = strchr (++p_start, ','); ++ if (p_end) { ++ /* copy text between second ',' and third ',' */ ++ strncpy(t_str, p_start, p_end - p_start); ++ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) { ++ tmp = ((hour*3600) + (min*60) + sec)*GST_SECOND + msec*GST_MSECOND; ++ GST_DEBUG_OBJECT(parse, "Get end time:%02d:%02d:%02d:%03d\n", ++ hour, min, sec, msec); ++ if (end_time < tmp) ++ end_time = tmp; ++ } else { ++ GST_WARNING_OBJECT (parse, ++ "failed to parse ssa end timestamp string :%s", t_str); ++ } ++ } ++ } ++ ++ /* now skip all non-text fields before the actual text */ ++ for (i = 0; i <= 8; ++i) { ++ t = strchr (t, ','); ++ if (t == NULL) ++ break; ++ ++t; ++ } ++ } ++ ++ /* line end before expected number of ',', not a Dialogue line */ + if (t == NULL) +- return GST_FLOW_ERROR; +- ++t; ++ break; ++ ++ /* if not the first line, and the last character of previous line is '\0', ++ * then replace it with '\N' */ ++ if (p != text && *p == '\0') { ++ *p++ = '\\'; ++ *p++ = 'N'; ++ } ++ ++ /* copy all actual text of this line */ ++ while ((*t != '\0') && (*t != '\n')) ++ *p++ = *t++; ++ ++ /* add a terminator at the end */ ++ *p = '\0'; ++ } ++ ++ /* not valid text found in this buffer return OK to let caller unref buffer */ ++ if (strlen(text) <= 0) { ++ GST_WARNING_OBJECT (parse, "Not valid text found in this buffer\n"); ++ return GST_FLOW_ERROR; + } + ++ t = text; + GST_LOG_OBJECT (parse, "Text : %s", t); + + if (gst_ssa_parse_remove_override_codes (parse, t)) { +@@ -307,13 +414,22 @@ gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, + gst_buffer_fill (buf, 0, escaped, len + 1); + gst_buffer_set_size (buf, len); + g_free (escaped); ++ g_free(t); ++ ++ if (start_time != G_MAXUINT64) ++ GST_BUFFER_TIMESTAMP (buf) = start_time; ++ else ++ GST_BUFFER_TIMESTAMP (buf) = start; + +- GST_BUFFER_TIMESTAMP (buf) = start; +- GST_BUFFER_DURATION (buf) = duration; ++ if (end_time > start_time) ++ GST_BUFFER_DURATION (buf) = end_time - start_time; ++ else ++ GST_BUFFER_DURATION (buf) = duration; + + GST_LOG_OBJECT (parse, "Pushing buffer with timestamp %" GST_TIME_FORMAT +- " and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (start), +- GST_TIME_ARGS (duration)); ++ " and duration %" GST_TIME_FORMAT, ++ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), ++ GST_TIME_ARGS (GST_BUFFER_DURATION (buf))); + + ret = gst_pad_push (parse->srcpad, buf); + +@@ -333,6 +449,7 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf) + GstClockTime ts; + gchar *txt; + GstMapInfo map; ++ gint size; + + if (G_UNLIKELY (!parse->framed)) + goto not_framed; +@@ -350,13 +467,14 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf) + /* make double-sure it's 0-terminated and all */ + gst_buffer_map (buf, &map, GST_MAP_READ); + txt = g_strndup ((gchar *) map.data, map.size); ++ size = map.size; + gst_buffer_unmap (buf, &map); + + if (txt == NULL) + goto empty_text; + + ts = GST_BUFFER_TIMESTAMP (buf); +- ret = gst_ssa_parse_push_line (parse, txt, ts, GST_BUFFER_DURATION (buf)); ++ ret = gst_ssa_parse_push_line (parse, txt, size, ts, GST_BUFFER_DURATION (buf)); + + if (ret != GST_FLOW_OK && GST_CLOCK_TIME_IS_VALID (ts)) { + GstSegment segment; +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch new file mode 100644 index 000000000..132bf06f7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch @@ -0,0 +1,69 @@ +From 3a7cdcdfc9c5b0d20394fe51b3b8cda23931ca6d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com> +Date: Fri, 12 Sep 2014 14:41:01 +0300 +Subject: [PATCH 3/3] videofilter: Use new GST_VIDEO_FRAME_MAP_FLAG_NO_REF + +Upstream-Status: Backport [1.5.1] +https://bugzilla.gnome.org/show_bug.cgi?id=736118 +--- + gst-libs/gst/video/gstvideofilter.c | 23 ++++------------------- + 1 file changed, 4 insertions(+), 19 deletions(-) + +diff --git a/gst-libs/gst/video/gstvideofilter.c b/gst-libs/gst/video/gstvideofilter.c +index e1fa2c1..874b2e8 100644 +--- a/gst-libs/gst/video/gstvideofilter.c ++++ b/gst-libs/gst/video/gstvideofilter.c +@@ -260,23 +260,15 @@ gst_video_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf, + if (fclass->transform_frame) { + GstVideoFrame in_frame, out_frame; + +- if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf, GST_MAP_READ)) ++ if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf, ++ GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF)) + goto invalid_buffer; + + if (!gst_video_frame_map (&out_frame, &filter->out_info, outbuf, +- GST_MAP_WRITE)) ++ GST_MAP_WRITE | GST_VIDEO_FRAME_MAP_FLAG_NO_REF)) + goto invalid_buffer; + +- /* GstVideoFrame has another reference, so the buffer looks unwriteable, +- * meaning that we can't attach any metas or anything to it. Other +- * map() functions like gst_buffer_map() don't get another reference +- * of the buffer and expect the buffer reference to be kept until +- * the buffer is unmapped again. */ +- gst_buffer_unref (inbuf); +- gst_buffer_unref (outbuf); + res = fclass->transform_frame (filter, &in_frame, &out_frame); +- gst_buffer_ref (inbuf); +- gst_buffer_ref (outbuf); + + gst_video_frame_unmap (&out_frame); + gst_video_frame_unmap (&in_frame); +@@ -317,7 +309,7 @@ gst_video_filter_transform_ip (GstBaseTransform * trans, GstBuffer * buf) + GstVideoFrame frame; + GstMapFlags flags; + +- flags = GST_MAP_READ; ++ flags = GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF; + + if (!gst_base_transform_is_passthrough (trans)) + flags |= GST_MAP_WRITE; +@@ -325,14 +317,7 @@ gst_video_filter_transform_ip (GstBaseTransform * trans, GstBuffer * buf) + if (!gst_video_frame_map (&frame, &filter->in_info, buf, flags)) + goto invalid_buffer; + +- /* GstVideoFrame has another reference, so the buffer looks unwriteable, +- * meaning that we can't attach any metas or anything to it. Other +- * map() functions like gst_buffer_map() don't get another reference +- * of the buffer and expect the buffer reference to be kept until +- * the buffer is unmapped again. */ +- gst_buffer_unref (buf); + res = fclass->transform_frame_ip (filter, &frame); +- gst_buffer_ref (buf); + + gst_video_frame_unmap (&frame); + } else { +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch new file mode 100644 index 000000000..7813915d8 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch @@ -0,0 +1,69 @@ +From ed09c8fd2c9c2b5384b72cc70af3728be6694e64 Mon Sep 17 00:00:00 2001 +From: Mingke Wang <mingke.wang@freescale.com> +Date: Thu, 19 Mar 2015 14:20:26 +0800 +Subject: [PATCH 4/4] subparse: set need_segment after sink pad received + GST_EVENT_SEGMENT + +subparse works in push mode, chain funciton will be called once +up stream element finished the seeking and flushing. +if set need_segment flag in src pad event handler, the segment +event will be pushed earlier, result in the subtitle text will +be send out to down stream from the beginning. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747498] + +Signed-off-by: Mingke Wang <mingke.wang@freescale.com> + +diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c +old mode 100644 +new mode 100755 +index b565e93..7741ccc +--- a/gst/subparse/gstsubparse.c ++++ b/gst/subparse/gstsubparse.c +@@ -266,22 +266,20 @@ gst_sub_parse_src_event (GstPad * pad, GstObject * parent, GstEvent * event) + goto beach; + } + ++ /* Apply the seek to our segment */ ++ gst_segment_do_seek (&self->segment, rate, format, flags, ++ start_type, start, stop_type, stop, &update); ++ ++ GST_DEBUG_OBJECT (self, "segment after seek: %" GST_SEGMENT_FORMAT, ++ &self->segment); ++ + /* Convert that seek to a seeking in bytes at position 0, + FIXME: could use an index */ + ret = gst_pad_push_event (self->sinkpad, + gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, + GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, 0)); + +- if (ret) { +- /* Apply the seek to our segment */ +- gst_segment_do_seek (&self->segment, rate, format, flags, +- start_type, start, stop_type, stop, &update); +- +- GST_DEBUG_OBJECT (self, "segment after seek: %" GST_SEGMENT_FORMAT, +- &self->segment); +- +- self->need_segment = TRUE; +- } else { ++ if (!ret) { + GST_WARNING_OBJECT (self, "seek to 0 bytes failed"); + } + +@@ -1632,8 +1630,10 @@ gst_sub_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) + gst_event_parse_segment (event, &s); + if (s->format == GST_FORMAT_TIME) + gst_event_copy_segment (event, &self->segment); +- GST_DEBUG_OBJECT (self, "newsegment (%s)", +- gst_format_get_name (self->segment.format)); ++ GST_DEBUG_OBJECT (self, "newsegment (%s) %" GST_SEGMENT_FORMAT, ++ gst_format_get_name (self->segment.format), &self->segment); ++ ++ self->need_segment = TRUE; + + /* if not time format, we'll either start with a 0 timestamp anyway or + * it's following a seek in which case we'll have saved the requested +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch new file mode 100644 index 000000000..aa55de10e --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch @@ -0,0 +1,37 @@ +From b608d027fff6efc2d1988ebf169cbe3b2b44a61b Mon Sep 17 00:00:00 2001 +From: zhouming <b42586@freescale.com> +Date: Thu, 8 May 2014 12:01:17 +0800 +Subject: [PATCH] ENGR00312034: do not change eos event to gap event if no + data has passed to streamsynchronizer. + +https://bugzilla.gnome.org/show_bug.cgi?id=727074 + +Upstream-Status: Pending + +Signed-off-by: zhouming <b42586@freescale.com> +--- + gst/playback/gststreamsynchronizer.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c +index 3997d1b..3e17c55 100644 +--- a/gst/playback/gststreamsynchronizer.c ++++ b/gst/playback/gststreamsynchronizer.c +@@ -488,12 +488,11 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent, + } + g_slist_free (pads); + } else { +- /* if EOS, but no data has passed, then send something to replace EOS +- * for preroll purposes */ ++ /* if EOS, but no data has passed, then send EOS event */ + if (!seen_data) { + GstEvent *gap_event; + +- gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE); ++ gap_event = gst_event_new_eos (); + ret = gst_pad_push_event (srcpad, gap_event); + } else { + GstEvent *gap_event; +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch new file mode 100755 index 000000000..f24bc7cd6 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch @@ -0,0 +1,49 @@ +commit f9536544f5ad182b4f78d0143d1daa45dd64e624 +Author: Song Bing <b06498@freescale.com> +Date: Thu Oct 9 17:37:43 2014 +0800 + +[gststreamsynchronizer] send EOS event insterd of GAP event as GAP +event has issue when A/V have different duration. + +send EOS event insterd of GAP event as GAP event has issue when A/V have different duration. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=736655] + +Signed-off-by: Song Bing <b06498@freescale.com> + +diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c +index 3e17c55..ff42d72 100644 +--- a/gst/playback/gststreamsynchronizer.c ++++ b/gst/playback/gststreamsynchronizer.c +@@ -488,19 +488,24 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent, + } + g_slist_free (pads); + } else { +- /* if EOS, but no data has passed, then send EOS event */ ++ /* if EOS, but no data has passed, then send something to replace EOS ++ * for preroll purposes */ + if (!seen_data) { +- GstEvent *gap_event; ++ GstEvent *eos_event; + +- gap_event = gst_event_new_eos (); +- ret = gst_pad_push_event (srcpad, gap_event); ++ /* FIXME: change to EOS event as GAP event has issue when A/V have ++ * different duration */ ++ eos_event = gst_event_new_eos (); ++ ret = gst_pad_push_event (srcpad, eos_event); + } else { +- GstEvent *gap_event; ++ GstEvent *eos_event; + + /* FIXME: Also send a GAP event to let audio sinks start their + * clock in case they did not have enough data yet */ +- gap_event = gst_event_new_gap (timestamp, GST_CLOCK_TIME_NONE); +- ret = gst_pad_push_event (srcpad, gap_event); ++ /* FIXME: change to EOS event as GAP event has issue when A/V have ++ * different duration */ ++ eos_event = gst_event_new_eos (); ++ ret = gst_pad_push_event (srcpad, eos_event); + } + } + gst_object_unref (srcpad); diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch new file mode 100755 index 000000000..731be686d --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch @@ -0,0 +1,31 @@ +commit 3f7052aac5e0118a9a9e09fff2f65091be448972 +Author: Song Bing <b06498@freescale.com> +Date: Thu Oct 23 13:35:13 2014 +0800 + +[streamsynchronizer] One stream can finish playback. + +As changed GAP event EOS event, so EOS will send more times, which will +cause send function return error. +Streamsynchronizer will don’t send second track EOS event if send the +first track EOS return fail. Fixed by ignore the return error. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=736655] + +Signed-off-by: Song Bing b06498@freescale.com + +diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c +index ff42d72..d1732c3 100644 +--- a/gst/playback/gststreamsynchronizer.c ++++ b/gst/playback/gststreamsynchronizer.c +@@ -482,7 +482,10 @@ gst_stream_synchronizer_sink_event (GstPad * pad, GstObject * parent, + while (epad) { + pad = epad->data; + GST_DEBUG_OBJECT (pad, "Pushing EOS"); +- ret = ret && gst_pad_push_event (pad, gst_event_new_eos ()); ++ /* FIXME: remove error check as GAP changed to EOS will send EOS ++ * more times, which will cause return error and then don't send ++ * EOS event to following tracks. */ ++ gst_pad_push_event (pad, gst_event_new_eos ()); + gst_object_unref (pad); + epad = g_slist_next (epad); + } diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/encodebin-Need-more-buffers-in-output-queue-for-bett.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/encodebin-Need-more-buffers-in-output-queue-for-bett.patch new file mode 100644 index 000000000..325671721 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/encodebin-Need-more-buffers-in-output-queue-for-bett.patch @@ -0,0 +1,32 @@ +From 540e02c92c75e08b90326863dc787fa5cadf9da6 Mon Sep 17 00:00:00 2001 +From: Song Bing <b06498@freescale.com> +Date: Fri, 13 Mar 2015 18:04:31 +0800 +Subject: [PATCH] encodebin: Need more buffers in output queue for better + performance + +Need more buffers in output queue for better performance + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=744191] + +Signed-off-by: Song Bing <b06498@freescale.com> +--- + gst/encoding/gstencodebin.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/gst/encoding/gstencodebin.c b/gst/encoding/gstencodebin.c +index 6728e58..32daae4 100644 +--- a/gst/encoding/gstencodebin.c ++++ b/gst/encoding/gstencodebin.c +@@ -1138,8 +1138,7 @@ _create_stream_group (GstEncodeBin * ebin, GstEncodingProfile * sprof, + * We only use a 1buffer long queue here, the actual queueing will be done + * in the input queue */ + last = sgroup->outqueue = gst_element_factory_make ("queue", NULL); +- g_object_set (sgroup->outqueue, "max-size-buffers", (guint32) 1, +- "max-size-bytes", (guint32) 0, "max-size-time", (guint64) 0, ++ g_object_set (sgroup->outqueue, "max-size-time", (guint64) 0, + "silent", TRUE, NULL); + + gst_bin_add (GST_BIN (ebin), sgroup->outqueue); +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch new file mode 100755 index 000000000..ef3f75fba --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch @@ -0,0 +1,54 @@ +Author: Lyon Wang <b12696@freescale.com> +Date: Thu Oct 9 17:37:43 2014 +0800 + +[id3v2frames] Bug fix for id3demux issue + +Fix the issue that id3 tags utf16 charaters cannot be extreacted in id3demux +when I tried to get the id3v2 tag such as TIT2, TALB etc. it will return extrac +failed. + +Checked in id3v2frame.c, When parse the UTF-16 streams, it used g_convert() to +convert the buffer from UTF-16 to UTF-8, however it will return err that this +conversion is not supported which cause the extraction failed with these UTF-16 +characters. + +In the patch, use g_utf16_to_utf8() instead of g_convert, which can convert the +character format successfully. + +https://bugzilla.gnome.org/show_bug.cgi?id=741144 + +Upstream-Status: Backport [1.5.1] + +Signed-off-by: Lyon Wang <b12696@freescale.com> + +diff --git a/gst-libs/gst/tag/id3v2frames.c b/gst-libs/gst/tag/id3v2frames.c +old mode 100644 +new mode 100755 +index 3785c2a..7b9d8ac +--- a/gst-libs/gst/tag/id3v2frames.c ++++ b/gst-libs/gst/tag/id3v2frames.c +@@ -1057,14 +1057,17 @@ parse_insert_string_field (guint8 encoding, gchar * data, gint data_size, + data_size -= 2; + } + +- field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL); +- +- if (field == NULL || g_utf8_validate (field, -1, NULL) == FALSE) { +- /* As a fallback, try interpreting UTF-16 in the other endianness */ +- if (in_encode == utf16beenc) +- field = g_convert (data, data_size, "UTF-8", utf16leenc, +- NULL, NULL, NULL); ++ if (in_encode == utf16beenc) { ++ gunichar2 *data_utf16; ++ guint i; ++ data_utf16 = (gunichar2 *) data; ++ for (i=0; i<(data_size>>1); i++) { ++ data_utf16[i] = GUINT16_TO_LE (data_utf16[i]); ++ } + } ++ //field = g_convert (data, data_size, "UTF-8", in_encode, NULL, NULL, NULL); ++ field = g_utf16_to_utf8((gunichar2 *)data, (glong)(data_size>>1), NULL, NULL, NULL); ++ + } + + break; diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch new file mode 100644 index 000000000..284abbe94 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch @@ -0,0 +1,44 @@ +From af0dac26f62aaceb4bf266720911953793e0fc5d Mon Sep 17 00:00:00 2001 +From: zhouming <b42586@freescale.com> +Date: Wed, 14 May 2014 10:16:20 +0800 +Subject: [PATCH] ENGR00312515: get caps from src pad when query caps + +https://bugzilla.gnome.org/show_bug.cgi?id=728312 + +Upstream-Status: Pending + +Signed-off-by: zhouming <b42586@freescale.com> +--- + gst-libs/gst/tag/gsttagdemux.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + mode change 100644 => 100755 gst-libs/gst/tag/gsttagdemux.c + +diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c +old mode 100644 +new mode 100755 +index 9b6c478..ae2294a +--- a/gst-libs/gst/tag/gsttagdemux.c ++++ b/gst-libs/gst/tag/gsttagdemux.c +@@ -1708,6 +1708,19 @@ gst_tag_demux_pad_query (GstPad * pad, GstObject * parent, GstQuery * query) + } + break; + } ++ case GST_QUERY_CAPS: ++ { ++ ++ /* We can hijack caps query if we typefind already */ ++ if (demux->priv->src_caps) { ++ gst_query_set_caps_result (query, demux->priv->src_caps); ++ res = TRUE; ++ } else { ++ res = gst_pad_query_default (pad, parent, query); ++ } ++ break; ++ } ++ + default: + res = gst_pad_query_default (pad, parent, query); + break; +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch new file mode 100755 index 000000000..833ce72bb --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch @@ -0,0 +1,64 @@ +From bcb2b8b6f49e7c66124a4f5e07dea829d5ebfe59 Mon Sep 17 00:00:00 2001 +From: Lyon Wang <lyon.wang@freescale.com> +Date: Mon, 15 Dec 2014 16:52:07 +0800 +Subject: [PATCH] handle audio/video decoder error + +When there is input data and no output data to the end of the stream, it will +send GST_ELEMENT_ERROR, So the clips playing will quit. +However, if only one of the tracks is corrupt, there is no need to quit other +tracks playing. + +The patch comments the GST_ELEMENT_ERROR() and just add GST_ERROR_OBJECT() +information instead. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=741542] + +Signed-off-by: Lyon Wang <lyon.wang@freescale.com> +--- + gst-libs/gst/audio/gstaudiodecoder.c | 5 +++-- + gst-libs/gst/video/gstvideodecoder.c | 5 +++-- + 2 files changed, 6 insertions(+), 4 deletions(-) + mode change 100644 => 100755 gst-libs/gst/audio/gstaudiodecoder.c + mode change 100644 => 100755 gst-libs/gst/video/gstvideodecoder.c + +diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c +old mode 100644 +new mode 100755 +index c2e7a28..891df0a +--- a/gst-libs/gst/audio/gstaudiodecoder.c ++++ b/gst-libs/gst/audio/gstaudiodecoder.c +@@ -2123,9 +2123,10 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event) + GST_AUDIO_DECODER_STREAM_UNLOCK (dec); + + if (dec->priv->ctx.had_input_data && !dec->priv->ctx.had_output_data) { +- GST_ELEMENT_ERROR (dec, STREAM, DECODE, ++ /* GST_ELEMENT_ERROR (dec, STREAM, DECODE, + ("No valid frames decoded before end of stream"), +- ("no valid frames found")); ++ ("no valid frames found")); */ ++ GST_ERROR_OBJECT(dec, "No valid frames decoded before end of stream"); + } + + /* send taglist if no valid frame is decoded util EOS */ +diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c +old mode 100644 +new mode 100755 +index ac581e1..4278bcd +--- a/gst-libs/gst/video/gstvideodecoder.c ++++ b/gst-libs/gst/video/gstvideodecoder.c +@@ -1068,9 +1068,10 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder, + + /* Error out even if EOS was ok when we had input, but no output */ + if (ret && priv->had_input_data && !priv->had_output_data) { +- GST_ELEMENT_ERROR (decoder, STREAM, DECODE, ++ /* GST_ELEMENT_ERROR (decoder, STREAM, DECODE, + ("No valid frames decoded before end of stream"), +- ("no valid frames found")); ++ ("no valid frames found")); */ ++ GST_ERROR_OBJECT(decoder, "No valid frames decoded before end of stream"); + } + + /* Forward EOS immediately. This is required because no +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch new file mode 100644 index 000000000..62a52b038 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch @@ -0,0 +1,57 @@ +From 68fa1b1425ad2c5f7c5013d0943153a8a6d0934e Mon Sep 17 00:00:00 2001 +From: Jian Li <lj.qfy.sh@gmail.com> +Date: Wed, 24 Sep 2014 17:21:02 +0800 +Subject: [PATCH] taglist not send to down stream if all the frame corrupted + +https://bugzilla.gnome.org/show_bug.cgi?id=737246 + +Upstream-Status: Pending + +Signed-off-by: Jian Li <lj.qfy.sh@gmail.com> +--- + gst-libs/gst/audio/gstaudiodecoder.c | 9 +++++++++ + gst-libs/gst/video/gstvideodecoder.c | 8 ++++++++ + 2 files changed, 17 insertions(+) + +diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c +index 3504678..3d69efe 100644 +--- a/gst-libs/gst/audio/gstaudiodecoder.c ++++ b/gst-libs/gst/audio/gstaudiodecoder.c +@@ -2083,6 +2083,15 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event) + gst_audio_decoder_drain (dec); + GST_AUDIO_DECODER_STREAM_UNLOCK (dec); + ++ /* send taglist if no valid frame is decoded util EOS */ ++ if (dec->priv->taglist && dec->priv->taglist_changed) { ++ GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, dec->priv->taglist); ++ if (!gst_tag_list_is_empty (dec->priv->taglist)) ++ gst_audio_decoder_push_event (dec, ++ gst_event_new_tag (gst_tag_list_ref (dec->priv->taglist))); ++ dec->priv->taglist_changed = FALSE; ++ } ++ + /* Forward EOS because no buffer or serialized event will come after + * EOS and nothing could trigger another _finish_frame() call. */ + ret = gst_audio_decoder_push_event (dec, event); +diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c +index dd8abe3..d9bfe4d 100644 +--- a/gst-libs/gst/video/gstvideodecoder.c ++++ b/gst-libs/gst/video/gstvideodecoder.c +@@ -1024,6 +1024,14 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder, + * parent class' ::sink_event() until a later time. + */ + forward_immediate = TRUE; ++ ++ /* send taglist if no valid frame is decoded util EOS */ ++ if (decoder->priv->tags && decoder->priv->tags_changed) { ++ gst_video_decoder_push_event (decoder, ++ gst_event_new_tag (gst_tag_list_ref (decoder->priv->tags))); ++ decoder->priv->tags_changed = FALSE; ++ } ++ + break; + } + case GST_EVENT_GAP: +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch new file mode 100755 index 000000000..8cfda955a --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch @@ -0,0 +1,53 @@ +commit 88d253ea23b06289df40401160b606323f16c910 +Author: Song Bing <b06498@freescale.com> +Date: Mon Dec 15 09:34:35 2014 +0800 + +videopool: update video alignment after video alignment + +Video buffer pool will update video alignment to respect stride alignment +requirement. But haven't update it to video alignment in configure. +Which will cause user get wrong video alignment. + +https://bugzilla.gnome.org/show_bug.cgi?id=741501 + +Upstream-Status: Backport [1.5.1] + +Signed-off-by: Song Bing <b06498@freescale.com> +diff --git a/gst-libs/gst/video/gstvideopool.c b/gst-libs/gst/video/gstvideopool.c +index 4475f45..acef594 100644 +--- a/gst-libs/gst/video/gstvideopool.c ++++ b/gst-libs/gst/video/gstvideopool.c +@@ -167,6 +167,7 @@ video_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) + /* get an apply the alignment to the info */ + gst_buffer_pool_config_get_video_alignment (config, &priv->video_align); + gst_video_info_align (&info, &priv->video_align); ++ gst_buffer_pool_config_set_video_alignment (config, &priv->video_align); + } + priv->info = info; + +diff --git a/sys/ximage/ximagepool.c b/sys/ximage/ximagepool.c +index 6cc2cfa..6a1cbc9 100644 +--- a/sys/ximage/ximagepool.c ++++ b/sys/ximage/ximagepool.c +@@ -597,6 +597,8 @@ ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) + /* do padding and alignment */ + gst_video_info_align (&info, &priv->align); + ++ gst_buffer_pool_config_set_video_alignment (config, &priv->align); ++ + /* we need the video metadata too now */ + priv->add_metavideo = TRUE; + } else { +diff --git a/sys/xvimage/xvimagepool.c b/sys/xvimage/xvimagepool.c +index 244a51a..34b1ab2 100644 +--- a/sys/xvimage/xvimagepool.c ++++ b/sys/xvimage/xvimagepool.c +@@ -124,6 +124,8 @@ xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) + /* do padding and alignment */ + gst_video_info_align (&info, &priv->align); + ++ gst_buffer_pool_config_set_video_alignment (config, &priv->align); ++ + /* we need the video metadata too now */ + priv->add_metavideo = TRUE; + } else { diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch new file mode 100644 index 000000000..b47696911 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch @@ -0,0 +1,46 @@ +From c3f7d36b992a3cbcee3386dea85720f3cb04e1ff Mon Sep 17 00:00:00 2001 +From: Song Bing <b06498@freescale.com> +Date: Fri, 27 Mar 2015 13:39:43 +0800 +Subject: [PATCH] videoencoder: Keep sticky events around when doing a soft + reset + +The current code will first discard all frames, and then tries to copy +all sticky events from the (now discarded) frames. Let's change the order. + +https://bugzilla.gnome.org/show_bug.cgi?id=746865 + +Upstream-Status: Accepted + +--- + gst-libs/gst/video/gstvideoencoder.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c +index 614ba2d..4c5b111 100644 +--- a/gst-libs/gst/video/gstvideoencoder.c ++++ b/gst-libs/gst/video/gstvideoencoder.c +@@ -340,10 +340,6 @@ gst_video_encoder_reset (GstVideoEncoder * encoder, gboolean hard) + + priv->drained = TRUE; + +- g_list_foreach (priv->frames, (GFunc) gst_video_codec_frame_unref, NULL); +- g_list_free (priv->frames); +- priv->frames = NULL; +- + priv->bytes = 0; + priv->time = 0; + +@@ -392,6 +388,10 @@ gst_video_encoder_reset (GstVideoEncoder * encoder, gboolean hard) + encoder->priv->current_frame_events); + } + ++ g_list_foreach (priv->frames, (GFunc) gst_video_codec_frame_unref, NULL); ++ g_list_free (priv->frames); ++ priv->frames = NULL; ++ + GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder); + + return ret; +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb new file mode 100644 index 000000000..b09c2cb58 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb @@ -0,0 +1,30 @@ +include gstreamer1.0-plugins-base.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=c54ce9345727175ff66d17b67ff51f58 \ + file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \ + file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \ + " + +SRC_URI += "file://do-not-change-eos-event-to-gap-event-if.patch \ + file://get-caps-from-src-pad-when-query-caps.patch \ + file://taglist-not-send-to-down-stream-if-all-the-frame-cor.patch \ + file://fix-id3demux-utf16-to-utf8-issue.patch \ + file://handle-audio-video-decoder-error.patch \ + file://videobuffer_updata_alignment_update.patch \ + file://0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch \ + file://0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch \ + file://0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch \ + file://videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch \ + file://do-not-change-eos-event-to-gap-event2.patch \ + file://do-not-change-eos-event-to-gap-event3.patch \ + file://0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch \ + file://0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch \ + file://0003-ssaparse-enhance-SSA-text-lines-parsing.patch \ + file://0004-subparse-set-need_segment-after-sink-pad-received-GS.patch \ + file://encodebin-Need-more-buffers-in-output-queue-for-bett.patch \ +" + +SRC_URI[md5sum] = "357165af625c0ca353ab47c5d843920e" +SRC_URI[sha256sum] = "77bd8199e7a312d3d71de9b7ddf761a3b78560a2c2a80829d0815ca39cbd551d" + +S = "${WORKDIR}/gst-plugins-base-${PV}" diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_git.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_git.bb new file mode 100644 index 000000000..fbe3a42cd --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_git.bb @@ -0,0 +1,19 @@ +DEFAULT_PREFERENCE = "-1" + +include gstreamer1.0-plugins-base.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=c54ce9345727175ff66d17b67ff51f58 \ + file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \ + file://COPYING.LIB;md5=6762ed442b3822387a51c92d928ead0d \ + " + +S = "${WORKDIR}/git" + +SRCREV = "8d4cb64a4b9d84b10076bf350f80a0d6ea68ec2d" + +do_configure_prepend() { + cd ${S} + ./autogen.sh --noconfigure + cd ${B} +} + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc new file mode 100644 index 000000000..6e316de9f --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc @@ -0,0 +1,57 @@ +require gstreamer1.0-plugins.inc + +LICENSE = "GPLv2+ & LGPLv2.1+" + +# libid3tag +DEPENDS += "gstreamer1.0-plugins-base zlib bzip2 libcap" + +inherit gettext + + +PACKAGECONFIG ??= " \ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \ + orc cairo flac gdk-pixbuf gudev jpeg libpng soup speex taglib \ + " + +X11DEPENDS = "virtual/libx11 libsm libxrender libxfixes libxdamage" +X11ENABLEOPTS = "--enable-x --enable-xshm" +X11DISABLEOPTS = "--disable-x --disable-xshm" +PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}" +PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio" +PACKAGECONFIG[cairo] = "--enable-cairo,--disable-cairo,cairo" +PACKAGECONFIG[flac] = "--enable-flac,--disable-flac,flac" +PACKAGECONFIG[gdk-pixbuf] = "--enable-gdk_pixbuf,--disable-gdk_pixbuf,gdk-pixbuf" +PACKAGECONFIG[gudev] = "--with-gudev,--without-gudev,udev" +PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack" +PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg" +PACKAGECONFIG[libpng] = "--enable-libpng,--disable-libpng,libpng" +PACKAGECONFIG[soup] = "--enable-soup,--disable-soup,libsoup-2.4" +PACKAGECONFIG[speex] = "--enable-speex,--disable-speex,speex" +PACKAGECONFIG[taglib] = "--enable-taglib,--disable-taglib,taglib" +PACKAGECONFIG[vpx] = "--enable-vpx,--disable-vpx,libvpx" +PACKAGECONFIG[wavpack] = "--enable-wavpack,--disable-wavpack,wavpack" + +# the 1394 plugins require both libraw1394 and libiec61883 +# the former is included in meta-oe, the latter isn't +# -> disabled + +EXTRA_OECONF += " \ + --enable-oss \ + --enable-gst_v4l2 \ + --without-libv4l2 \ + --disable-directsound \ + --disable-waveform \ + --disable-oss4 \ + --disable-sunaudio \ + --disable-osx_audio \ + --disable-osx_video \ + --disable-aalib \ + --disable-libcaca \ + --disable-libdv \ + --disable-shout2 \ + --disable-examples \ + --disable-dv1394 \ +" + +FILES_${PN}-equalizer += "${datadir}/gstreamer-1.0/presets/*.prs" diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch new file mode 100755 index 000000000..d1973d439 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch @@ -0,0 +1,62 @@ +From c782a30482908a4b4dd9cd4abff9f9bc4016698f Mon Sep 17 00:00:00 2001 +From: Song Bing <b06498@freescale.com> +Date: Tue, 5 Aug 2014 14:40:46 +0800 +Subject: [PATCH] gstrtpmp4gpay: set dafault value for MPEG4 without codec + data in caps. + +https://bugzilla.gnome.org/show_bug.cgi?id=734263 + +Upstream-Status: Submitted + +Signed-off-by: Song Bing <b06498@freescale.com> +--- + gst/rtp/gstrtpmp4gpay.c | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/gst/rtp/gstrtpmp4gpay.c b/gst/rtp/gstrtpmp4gpay.c +index 7913d9a..1749d39 100644 +--- a/gst/rtp/gstrtpmp4gpay.c ++++ b/gst/rtp/gstrtpmp4gpay.c +@@ -390,6 +390,7 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps) + const GValue *codec_data; + const gchar *media_type = NULL; + gboolean res; ++ const gchar *name; + + rtpmp4gpay = GST_RTP_MP4G_PAY (payload); + +@@ -400,7 +401,6 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps) + GST_LOG_OBJECT (rtpmp4gpay, "got codec_data"); + if (G_VALUE_TYPE (codec_data) == GST_TYPE_BUFFER) { + GstBuffer *buffer; +- const gchar *name; + + buffer = gst_value_get_buffer (codec_data); + GST_LOG_OBJECT (rtpmp4gpay, "configuring codec_data"); +@@ -426,6 +426,23 @@ gst_rtp_mp4g_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps) + + rtpmp4gpay->config = gst_buffer_copy (buffer); + } ++ } else { ++ name = gst_structure_get_name (structure); ++ ++ if (!strcmp (name, "video/mpeg")) { ++ rtpmp4gpay->profile = g_strdup ("1"); ++ ++ /* fixed rate */ ++ rtpmp4gpay->rate = 90000; ++ /* video stream type */ ++ rtpmp4gpay->streamtype = "4"; ++ /* no params for video */ ++ rtpmp4gpay->params = NULL; ++ /* mode */ ++ rtpmp4gpay->mode = "generic"; ++ ++ media_type = "video"; ++ } + } + if (media_type == NULL) + goto config_failed; +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch new file mode 100755 index 000000000..288631bf7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch @@ -0,0 +1,25 @@ +commit d71d74daac8ed54156ed103958ab455c63c72b0e +Author: Song Bing <b06498@freescale.com> +Date: Mon Nov 10 11:25:47 2014 +0800 + +[asteriskh263] decrease the rank as we havn't this kind of decoder. + +Decrease the rank as we havn't this kind of decoder. + +https://bugzilla.gnome.org/show_bug.cgi?id=739935 + +Upstream-Status: Pending + +Signed-off-by: Song Bing <b06498@freescale.com> + +diff --git a/gst/rtp/gstasteriskh263.c b/gst/rtp/gstasteriskh263.c +index a01fbc8..8fa3194 100644 +--- a/gst/rtp/gstasteriskh263.c ++++ b/gst/rtp/gstasteriskh263.c +@@ -226,5 +226,5 @@ gboolean + gst_asteriskh263_plugin_init (GstPlugin * plugin) + { + return gst_element_register (plugin, "asteriskh263", +- GST_RANK_SECONDARY, GST_TYPE_ASTERISK_H263); ++ GST_RANK_SECONDARY - 1, GST_TYPE_ASTERISK_H263); + } diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.4.5.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.4.5.bb new file mode 100644 index 000000000..943ab6039 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.4.5.bb @@ -0,0 +1,13 @@ +include gstreamer1.0-plugins-good.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ + file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \ + file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe" + +SRC_URI += "file://0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch \ + file://decrease_asteriskh263_rank.patch \ +" +SRC_URI[md5sum] = "eaf1a6daf73749bc423feac301d60038" +SRC_URI[sha256sum] = "79b1b5f3f7bcaa8a615202eb5e176121eeb8336960f70687e536ad78dbc7e641" + +S = "${WORKDIR}/gst-plugins-good-${PV}" diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_git.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_git.bb new file mode 100644 index 000000000..2c0e0efe6 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_git.bb @@ -0,0 +1,18 @@ +DEFAULT_PREFERENCE = "-1" + +include gstreamer1.0-plugins-good.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ + file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=a4e1830fce078028c8f0974161272607 \ + file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe" + +S = "${WORKDIR}/git" + +SRCREV = "fd0123800c8c1cf1468c0fa5d592ad0d0d8b4140" + +do_configure_prepend() { + cd ${S} + ./autogen.sh --noconfigure + cd ${B} +} + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc new file mode 100644 index 000000000..63ba31632 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc @@ -0,0 +1,30 @@ +require gstreamer1.0-plugins.inc + +LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+" +LICENSE_FLAGS = "commercial" + +DEPENDS += "gstreamer1.0-plugins-base libid3tag" + +inherit gettext + + +PACKAGECONFIG ??= " \ + orc a52dec lame mad mpeg2dec \ + " + +PACKAGECONFIG[a52dec] = "--enable-a52dec,--disable-a52dec,liba52" +PACKAGECONFIG[cdio] = "--enable-cdio,--disable-cdio,libcdio" +PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread,libdvdread" +PACKAGECONFIG[lame] = "--enable-lame,--disable-lame,lame" +PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad" +PACKAGECONFIG[mpeg2dec] = "--enable-mpeg2dec,--disable-mpeg2dec,mpeg2dec" +PACKAGECONFIG[x264] = "--enable-x264,--disable-x264,x264" + + +EXTRA_OECONF += " \ + --disable-amrnb \ + --disable-amrwb \ + --disable-sidplay \ + --disable-twolame \ + " + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.4.5.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.4.5.bb new file mode 100644 index 000000000..25cb28c06 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.4.5.bb @@ -0,0 +1,10 @@ +include gstreamer1.0-plugins-ugly.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ + file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068 " + +SRC_URI[md5sum] = "6954beed7bb9a93e426dee543ff46393" +SRC_URI[sha256sum] = "5cd5e81cf618944f4dc935f1669b2125e8bb2fe9cc7dc8dc15b72237aca49067" + +S = "${WORKDIR}/gst-plugins-ugly-${PV}" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_git.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_git.bb new file mode 100644 index 000000000..dcf5ffc3c --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_git.bb @@ -0,0 +1,17 @@ +DEFAULT_PREFERENCE = "-1" + +include gstreamer1.0-plugins-ugly.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ + file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068 " + +S = "${WORKDIR}/git" + +SRCREV = "06b8ac10cee85c5c304ca320997aa8f44295a66f" + +do_configure_prepend() { + cd ${S} + ./autogen.sh --noconfigure + cd ${B} +} + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc new file mode 100644 index 000000000..f1783b768 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc @@ -0,0 +1,59 @@ +SUMMARY = "Plugins for the GStreamer multimedia framework 1.x" +HOMEPAGE = "http://gstreamer.freedesktop.org/" +BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer" +SECTION = "multimedia" +DEPENDS = "gstreamer1.0" + +inherit autotools pkgconfig + +GSTREAMER_1_0_DEBUG ?= "--disable-debug" +GSTREAMER_1_0_GIT_BRANCH ?= "master" +EXTRA_OECONF = "--disable-valgrind ${GSTREAMER_1_0_DEBUG} --disable-examples " + +acpaths = "-I ${S}/common/m4 -I ${S}/m4" + +LIBV = "1.0" +require gst-plugins-package.inc + +PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc orc-native" + +export ORCC = "${STAGING_DIR_NATIVE}${bindir}/orcc" + +PACKAGES_DYNAMIC = "^${PN}-.*" + +# apply gstreamer hack after Makefile.in.in in source is replaced by our version from +# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed +# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html +oe_runconf_prepend() { + if [ -e ${S}/po/Makefile.in.in ]; then + sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in + fi +} + +SRC_URI = "${@get_gst_srcuri(d)}" + +def get_gst_srcuri(d): + # check if expected prefix is present + prefix = "gstreamer1.0-" + bpn = d.getVar("BPN", True) + if not bpn.startswith(prefix): + bb.fatal('Invalid GStreamer 1.0 plugin package name "%s" : must start with "%s"' % (bpn, prefix)) + + # replaced prefix with "gst-", which is what is used for the tarball and repository filenames + gstpkg_basename = "gst-" + bpn[len(prefix):] + pv = d.getVar("PV", True) + branch = d.getVar("GSTREAMER_1_0_GIT_BRANCH", True) + + if pv == "git": + s = "git://anongit.freedesktop.org/gstreamer/%s;branch=%s" % (gstpkg_basename, branch) + else: + s = "http://gstreamer.freedesktop.org/src/%s/%s-%s.tar.xz" % (gstpkg_basename, gstpkg_basename, pv) + return s + +delete_liblink_m4_file() { + # This m4 file contains nastiness which conflicts with libtool 2.2.2 + rm "${S}/m4/lib-link.m4" || true +} + +do_configure[prefuncs] += " delete_liblink_m4_file " + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server.inc new file mode 100644 index 000000000..28a9420f8 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server.inc @@ -0,0 +1,14 @@ +SUMMARY = "A library on top of GStreamer for building an RTSP server" +SECTION = "multimedia" +LICENSE = "LGPLv2" +HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-rtsp-server/" +DEPENDS = "gstreamer1.0 libcgroup gstreamer1.0-plugins-base" + +PNREAL = "gst-rtsp-server" + +SRC_URI = "http://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz" + +S = "${WORKDIR}/${PNREAL}-${PV}" + +inherit autotools pkgconfig + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.4.5.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.4.5.bb new file mode 100644 index 000000000..bb9b42b53 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.4.5.bb @@ -0,0 +1,6 @@ +include gstreamer1.0-rtsp-server.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d" + +SRC_URI[md5sum] = "a9f9b8899ec7ab33663cda7627db40d3" +SRC_URI[sha256sum] = "3089254bd31b7c1f1cf2c034a3b3551f92878f9e3cab65cef3a901a04c0f1d37" diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0.inc b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0.inc new file mode 100644 index 000000000..be8aa8f9c --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0.inc @@ -0,0 +1,29 @@ +SUMMARY = "GStreamer 1.0 multimedia framework" +DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \ +It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime." +HOMEPAGE = "http://gstreamer.freedesktop.org/" +BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer" +SECTION = "multimedia" +LICENSE = "LGPLv2+" +DEPENDS = "glib-2.0 libxml2 bison-native flex-native" + +inherit autotools pkgconfig gettext + +PACKAGECONFIG[debug] = "--enable-debug,--disable-debug" +PACKAGECONFIG[check] = "--enable-check,--disable-check" + +EXTRA_OECONF = "--disable-docbook --disable-gtk-doc \ + --disable-dependency-tracking \ + --disable-examples --disable-tests \ + --disable-valgrind \ + " + +RRECOMMENDS_${PN}_qemux86 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi" +RRECOMMENDS_${PN}_qemux86-64 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi" + +CACHED_CONFIGUREVARS += "ac_cv_header_valgrind_valgrind_h=no" + +FILES_${PN} += " ${libdir}/gstreamer-1.0/*.so" +FILES_${PN}-dev += " ${libdir}/gstreamer-1.0/*.la ${libdir}/gstreamer-1.0/*.a" +FILES_${PN}-dbg += " ${libdir}/gstreamer-1.0/.debug/ ${libexecdir}/gstreamer-1.0/.debug/" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch new file mode 100644 index 000000000..94f5cc56e --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch @@ -0,0 +1,28 @@ +From 6b26f3dbf9bf577d71534ab7410de66d06e46ba2 Mon Sep 17 00:00:00 2001 +From: Carlos Rafael Giani <dv@pseudoterminal.org> +Date: Sat, 6 Apr 2013 23:52:11 +0200 +Subject: [PATCH] Fix crash with gst-inspect Chris Lord <chris@openedhand.com> + +Upstream-Status: Pending + +Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org> +--- + tools/gst-inspect.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tools/gst-inspect.c b/tools/gst-inspect.c +index 23b7c44..b79b02e 100644 +--- a/tools/gst-inspect.c ++++ b/tools/gst-inspect.c +@@ -1556,7 +1556,7 @@ main (int argc, char *argv[]) + g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE); + g_option_context_add_group (ctx, gst_init_get_option_group ()); + if (!g_option_context_parse (ctx, &argc, &argv, &err)) { +- g_printerr ("Error initializing: %s\n", err->message); ++ g_printerr ("Error initializing: %s\n", err ? err->message : "(null)"); + return -1; + } + g_option_context_free (ctx); +-- +1.8.2 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch new file mode 100644 index 000000000..8213c4b8b --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch @@ -0,0 +1,55 @@ +From 81fecd367b016e5ac4fb0c04b84da5c474f30da6 Mon Sep 17 00:00:00 2001 +From: Peter Urbanec <git.user@urbanec.net> +Date: Fri, 27 Feb 2015 01:16:58 +1100 +Subject: [PATCH 1/1] gstinfo: Shorten __FILE__ on all platforms. + +This is useful not only for MSVC, but also with gcc/Linux when doing +cross-compilation builds and out-of-tree builds. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=745213] + +Signed-off-by: Peter Urbanec <git.user@urbanec.net> +--- + gst/gstinfo.c | 11 ++++------- + 1 file changed, 4 insertions(+), 7 deletions(-) + +diff --git a/gst/gstinfo.c b/gst/gstinfo.c +index b2a3005..8b61d09 100644 +--- a/gst/gstinfo.c ++++ b/gst/gstinfo.c +@@ -444,7 +444,6 @@ gst_debug_log (GstDebugCategory * category, GstDebugLevel level, + va_end (var_args); + } + +-#ifdef G_OS_WIN32 + /* based on g_basename(), which we can't use because it was deprecated */ + static inline const gchar * + gst_path_basename (const gchar * file_name) +@@ -467,7 +466,6 @@ gst_path_basename (const gchar * file_name) + + return file_name; + } +-#endif + + /** + * gst_debug_log_valist: +@@ -497,12 +495,11 @@ gst_debug_log_valist (GstDebugCategory * category, GstDebugLevel level, + g_return_if_fail (function != NULL); + g_return_if_fail (format != NULL); + +- /* The predefined macro __FILE__ is always the exact path given to the +- * compiler with MSVC, which may or may not be the basename. We work +- * around it at runtime to improve the readability. */ +-#ifdef G_OS_WIN32 ++ /* The predefined macro __FILE__ can be an absolute path in some build ++ * environments, such as MSVC or out-of-tree cross-compiles. This may ++ * be significantly longer than the filename. We work around it at ++ * runtime to improve the readability. */ + file = gst_path_basename (file); +-#endif + + message.message = NULL; + message.format = format; +-- +2.3.0 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch new file mode 100644 index 000000000..1505cbefc --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch @@ -0,0 +1,70 @@ +From 6914566ed6a89c96973a578aa5ecd01ee68cdcfd Mon Sep 17 00:00:00 2001 +From: Jian <Jian.Li@freescale.com> +Date: Thu, 14 May 2015 15:49:43 +0800 +Subject: [PATCH] basesink: Fix QoS/lateness checking if subclass implements + prepare/prepare_list vfuncs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In basesink functions gst_base_sink_chain_unlocked(), below code is used to +checking if buffer is late before doing prepare call to save some effort: + if (syncable && do_sync) + late = + gst_base_sink_is_too_late (basesink, obj, rstart, rstop, + GST_CLOCK_EARLY, 0, FALSE); + + if (G_UNLIKELY (late)) + goto dropped; + +But this code has problem, it should calculate jitter based on current media +clock, rather than just passing 0. I found it will drop all the frames when +rewind in slow speed, such as -2X. + +https://bugzilla.gnome.org/show_bug.cgi?id=749258 + +Upstream-Status: Backport [1.5.1] +--- + libs/gst/base/gstbasesink.c | 26 ++++++++++++++++++++++---- + 1 file changed, 22 insertions(+), 4 deletions(-) + +diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c +index a505695..5fb2d6a 100644 +--- a/libs/gst/base/gstbasesink.c ++++ b/libs/gst/base/gstbasesink.c +@@ -3369,10 +3369,28 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad, + if (G_UNLIKELY (stepped)) + goto dropped; + +- if (syncable && do_sync) +- late = +- gst_base_sink_is_too_late (basesink, obj, rstart, rstop, +- GST_CLOCK_EARLY, 0, FALSE); ++ if (syncable && do_sync) { ++ GstClock *clock; ++ ++ GST_OBJECT_LOCK (basesink); ++ clock = GST_ELEMENT_CLOCK (basesink); ++ if (clock && GST_STATE (basesink) == GST_STATE_PLAYING) { ++ GstClockTime base_time; ++ GstClockTime stime; ++ GstClockTime now; ++ ++ base_time = GST_ELEMENT_CAST (basesink)->base_time; ++ stime = base_time + gst_base_sink_adjust_time (basesink, rstart); ++ now = gst_clock_get_time (clock); ++ GST_OBJECT_UNLOCK (basesink); ++ ++ late = ++ gst_base_sink_is_too_late (basesink, obj, rstart, rstop, ++ GST_CLOCK_EARLY, GST_CLOCK_DIFF (stime, now), FALSE); ++ } else { ++ GST_OBJECT_UNLOCK (basesink); ++ } ++ } + + if (G_UNLIKELY (late)) + goto dropped; +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch new file mode 100755 index 000000000..f50ce6ff2 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch @@ -0,0 +1,167 @@ +From 83bed90c306ed3185d48febf6441177d638f7341 Mon Sep 17 00:00:00 2001 +From: Song Bing <b06498@freescale.com> +Date: Wed, 24 Dec 2014 10:13:51 +0800 +Subject: [PATCH] inputselector: sticky events haven't send out when active + track reach EOS + +EOS event hasn't been send to down-element. The resolution is block EOS event +of inactive pad, send the event after the pad actived. + +https://bugzilla.gnome.org/show_bug.cgi?id=740949 + +Upstream-Status: Backport [1.5.1] + +Signed-off-by: Song Bing <b06498@freescale.com> +--- + plugins/elements/gstinputselector.c | 58 ++++++++++++++++++++++++++--------- + plugins/elements/gstinputselector.h | 1 + + 2 files changed, 45 insertions(+), 14 deletions(-) + +diff --git a/plugins/elements/gstinputselector.c b/plugins/elements/gstinputselector.c +index fb50802..4461f7c 100644 +--- a/plugins/elements/gstinputselector.c ++++ b/plugins/elements/gstinputselector.c +@@ -440,6 +440,17 @@ gst_selector_pad_iterate_linked_pads (GstPad * pad, GstObject * parent) + } + + static gboolean ++gst_input_selector_eos_wait (GstInputSelector * self, GstSelectorPad * pad) ++{ ++ while (!self->eos && !self->flushing && !pad->flushing) { ++ /* we can be unlocked here when we are shutting down (flushing) or when we ++ * get unblocked */ ++ GST_INPUT_SELECTOR_WAIT (self); ++ } ++ return self->flushing; ++} ++ ++static gboolean + gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) + { + gboolean res = TRUE; +@@ -486,6 +497,7 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) + case GST_EVENT_FLUSH_START: + /* Unblock the pad if it's waiting */ + selpad->flushing = TRUE; ++ sel->eos = FALSE; + GST_INPUT_SELECTOR_BROADCAST (sel); + break; + case GST_EVENT_FLUSH_STOP: +@@ -523,21 +535,12 @@ gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) + case GST_EVENT_EOS: + selpad->eos = TRUE; + +- if (forward) { +- selpad->eos_sent = TRUE; +- } else { +- GstSelectorPad *active_selpad; +- +- /* If the active sinkpad is in EOS state but EOS +- * was not sent downstream this means that the pad +- * got EOS before it was set as active pad and that +- * the previously active pad got EOS after it was +- * active +- */ +- active_selpad = GST_SELECTOR_PAD (active_sinkpad); +- forward = (active_selpad->eos && !active_selpad->eos_sent); +- active_selpad->eos_sent = TRUE; ++ if (!forward) { ++ /* blocked until active the sind pad or flush */ ++ gst_input_selector_eos_wait (sel, selpad); ++ forward = TRUE; + } ++ selpad->eos_sent = TRUE; + GST_DEBUG_OBJECT (pad, "received EOS"); + break; + case GST_EVENT_GAP:{ +@@ -676,6 +679,12 @@ gst_input_selector_wait_running_time (GstInputSelector * sel, + gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (selpad)); + active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad); + ++ if (sel->eos) { ++ GST_DEBUG_OBJECT (sel, "Not waiting because inputselector reach EOS."); ++ GST_INPUT_SELECTOR_UNLOCK (sel); ++ return FALSE; ++ } ++ + if (seg->format != GST_FORMAT_TIME) { + GST_DEBUG_OBJECT (selpad, + "Not waiting because we don't have a TIME segment"); +@@ -971,6 +980,12 @@ gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); + + GST_INPUT_SELECTOR_LOCK (sel); ++ if (sel->eos) { ++ GST_DEBUG_OBJECT (pad, "inputselector eos."); ++ GST_INPUT_SELECTOR_UNLOCK (sel); ++ goto eos; ++ } ++ + /* wait or check for flushing */ + if (gst_input_selector_wait (sel, selpad)) { + GST_INPUT_SELECTOR_UNLOCK (sel); +@@ -1151,6 +1166,13 @@ flushing: + res = GST_FLOW_FLUSHING; + goto done; + } ++eos: ++ { ++ GST_DEBUG_OBJECT (pad, "We are eos, discard buffer %p", buf); ++ gst_buffer_unref (buf); ++ res = GST_FLOW_EOS; ++ goto done; ++ } + } + + static void gst_input_selector_dispose (GObject * object); +@@ -1309,6 +1331,7 @@ gst_input_selector_init (GstInputSelector * sel) + g_mutex_init (&sel->lock); + g_cond_init (&sel->cond); + sel->blocked = FALSE; ++ sel->eos = FALSE; + + /* lets give a change for downstream to do something on + * active-pad change before we start pushing new buffers */ +@@ -1377,6 +1400,11 @@ gst_input_selector_set_active_pad (GstInputSelector * self, GstPad * pad) + GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT, + self->active_sinkpad); + ++ if (old != new && new->eos && !new->eos_sent) { ++ self->eos = TRUE; ++ GST_INPUT_SELECTOR_BROADCAST (self); ++ } ++ + return TRUE; + } + +@@ -1771,6 +1799,7 @@ gst_input_selector_change_state (GstElement * element, + switch (transition) { + case GST_STATE_CHANGE_READY_TO_PAUSED: + GST_INPUT_SELECTOR_LOCK (self); ++ self->eos = FALSE; + self->blocked = FALSE; + self->flushing = FALSE; + GST_INPUT_SELECTOR_UNLOCK (self); +@@ -1779,6 +1808,7 @@ gst_input_selector_change_state (GstElement * element, + /* first unlock before we call the parent state change function, which + * tries to acquire the stream lock when going to ready. */ + GST_INPUT_SELECTOR_LOCK (self); ++ self->eos = TRUE; + self->blocked = FALSE; + self->flushing = TRUE; + GST_INPUT_SELECTOR_BROADCAST (self); +diff --git a/plugins/elements/gstinputselector.h b/plugins/elements/gstinputselector.h +index 96c680f..9bf924f 100644 +--- a/plugins/elements/gstinputselector.h ++++ b/plugins/elements/gstinputselector.h +@@ -77,6 +77,7 @@ struct _GstInputSelector { + GMutex lock; + GCond cond; + gboolean blocked; ++ gboolean eos; + gboolean flushing; + }; + +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.4.5.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.4.5.bb new file mode 100644 index 000000000..db58754a6 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.4.5.bb @@ -0,0 +1,17 @@ +include gstreamer1.0.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \ + file://gst/gst.h;beginline=1;endline=21;md5=e059138481205ee2c6fc1c079c016d0d" + +SRC_URI = " \ + http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \ + file://0001-Fix-crash-with-gst-inspect.patch \ + file://0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch \ + file://inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch \ + file://0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch \ +" +SRC_URI[md5sum] = "88a9289c64a4950ebb4f544980234289" +SRC_URI[sha256sum] = "40801aa7f979024526258a0e94707ba42b8ab6f7d2206e56adbc4433155cb0ae" + +S = "${WORKDIR}/gstreamer-${PV}" + diff --git a/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_git.bb b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_git.bb new file mode 100644 index 000000000..cb00d319a --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_git.bb @@ -0,0 +1,18 @@ +DEFAULT_PREFERENCE = "-1" + +include gstreamer1.0.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \ + file://gst/gst.h;beginline=1;endline=21;md5=e059138481205ee2c6fc1c079c016d0d" + +SRC_URI = "git://anongit.freedesktop.org/gstreamer/gstreamer;branch=master" +S = "${WORKDIR}/git" + +SRCREV = "3b8181a8c550e74acaba4e8c55bdc649fa551dc9" + +do_configure_prepend() { + cd ${S} + ./autogen.sh --noconfigure + cd ${B} +} + diff --git a/yocto-poky/meta/recipes-multimedia/lame/lame/lame-3.99.5_fix_for_automake-1.12.x.patch b/yocto-poky/meta/recipes-multimedia/lame/lame/lame-3.99.5_fix_for_automake-1.12.x.patch new file mode 100644 index 000000000..571a1d07a --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/lame/lame/lame-3.99.5_fix_for_automake-1.12.x.patch @@ -0,0 +1,59 @@ +Upstream-Status: Pending + +Fix this kind of errors with automake 1.12.x: +| doc/man/Makefile.am:3: error: automatic de-ANSI-fication support has been removed +| autoreconf: automake failed with exit status: 1 + +Signed-Off-by: Nitin A Kamble <nitin.a.kamble@intel.com> +2012/07/13 + +Index: lame-3.99.5/configure.in +=================================================================== +--- lame-3.99.5.orig/configure.in ++++ lame-3.99.5/configure.in +@@ -77,9 +77,6 @@ if test "${GCC}" = "yes"; then + AC_MSG_RESULT(${GCC_version}) + fi + +-dnl more automake stuff +-AM_C_PROTOTYPES +- + AC_CHECK_HEADER(dmalloc.h) + if test "${ac_cv_header_dmalloc_h}" = "yes"; then + AM_WITH_DMALLOC +Index: lame-3.99.5/doc/html/Makefile.am +=================================================================== +--- lame-3.99.5.orig/doc/html/Makefile.am ++++ lame-3.99.5/doc/html/Makefile.am +@@ -1,6 +1,6 @@ + ## $Id: Makefile.am,v 1.7 2010/09/30 20:58:40 jaz001 Exp $ + +-AUTOMAKE_OPTIONS = foreign ansi2knr ++AUTOMAKE_OPTIONS = foreign + + docdir = $(datadir)/doc + pkgdocdir = $(docdir)/$(PACKAGE) +Index: lame-3.99.5/libmp3lame/i386/Makefile.am +=================================================================== +--- lame-3.99.5.orig/libmp3lame/i386/Makefile.am ++++ lame-3.99.5/libmp3lame/i386/Makefile.am +@@ -1,6 +1,6 @@ + ## $Id: Makefile.am,v 1.26 2011/04/04 09:42:34 aleidinger Exp $ + +-AUTOMAKE_OPTIONS = foreign $(top_srcdir)/ansi2knr ++AUTOMAKE_OPTIONS = foreign + + DEFS = @DEFS@ @CONFIG_DEFS@ + +Index: lame-3.99.5/doc/man/Makefile.am +=================================================================== +--- lame-3.99.5.orig/doc/man/Makefile.am ++++ lame-3.99.5/doc/man/Makefile.am +@@ -1,6 +1,6 @@ + ## $Id: Makefile.am,v 1.1 2000/10/22 11:39:44 aleidinger Exp $ + +-AUTOMAKE_OPTIONS = foreign ansi2knr ++AUTOMAKE_OPTIONS = foreign + + man_MANS = lame.1 + EXTRA_DIST = ${man_MANS} diff --git a/yocto-poky/meta/recipes-multimedia/lame/lame/no-gtk1.patch b/yocto-poky/meta/recipes-multimedia/lame/lame/no-gtk1.patch new file mode 100644 index 000000000..e88d7f1bb --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/lame/lame/no-gtk1.patch @@ -0,0 +1,20 @@ +Upstream-Status: Inappropriate [configuration] + +# Acquired from OpenEmbedded + +--- lame-3.96.1/configure.in~no-gtk1.patch 2004-07-25 15:52:12.000000000 +0100 ++++ lame-3.96.1/configure.in 2004-09-10 15:54:39.000000000 +0100 +@@ -363,7 +363,12 @@ + + dnl configure use of features + +-AM_PATH_GTK(1.2.0, HAVE_GTK="yes", HAVE_GTK="no") ++#AM_PATH_GTK(1.2.0, HAVE_GTK="yes", HAVE_GTK="no") ++HAVE_GTK="no" ++GTK_CFLAGS="" ++GTK_LIBS="" ++AC_SUBST(GTK_CFLAGS) ++AC_SUBST(GTK_LIBS) + + dnl ElectricFence malloc debugging + AC_MSG_CHECKING(use of ElectricFence malloc debugging) diff --git a/yocto-poky/meta/recipes-multimedia/lame/lame_3.99.5.bb b/yocto-poky/meta/recipes-multimedia/lame/lame_3.99.5.bb new file mode 100644 index 000000000..047761153 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/lame/lame_3.99.5.bb @@ -0,0 +1,30 @@ +SUMMARY = "High quality MP3 audio encoder" +HOMEPAGE = "http://lame.sourceforge.net/" +BUGTRACKER = "http://sourceforge.net/tracker/?group_id=290&atid=100290" +SECTION = "console/utils" +LICENSE = "LGPLv2+" +LICENSE_FLAGS = "commercial" + +DEPENDS = "ncurses gettext-native" + +LIC_FILES_CHKSUM = "file://COPYING;md5=c46bda00ffbb0ba1dac22f8d087f54d9 \ + file://include/lame.h;beginline=1;endline=20;md5=a2258182c593c398d15a48262130a92b \ +" +PR = "r1" + +SRC_URI = "${SOURCEFORGE_MIRROR}/lame/lame-${PV}.tar.gz \ + file://no-gtk1.patch \ + file://lame-3.99.5_fix_for_automake-1.12.x.patch " + +SRC_URI[md5sum] = "84835b313d4a8b68f5349816d33e07ce" +SRC_URI[sha256sum] = "24346b4158e4af3bd9f2e194bb23eb473c75fb7377011523353196b19b9a23ff" + +inherit autotools pkgconfig + +PACKAGES += "libmp3lame libmp3lame-dev" +FILES_${PN} = "${bindir}/lame" +FILES_libmp3lame = "${libdir}/libmp3lame.so.*" +FILES_libmp3lame-dev = "${includedir} ${libdir}/*" +FILES_${PN}-dev = "" + +CACHED_CONFIGUREVARS_append_x86 = " ac_cv_header_emmintrin_h=no ac_cv_header_xmmintrin_h=no" diff --git a/yocto-poky/meta/recipes-multimedia/liba52/liba52/buildcleanup.patch b/yocto-poky/meta/recipes-multimedia/liba52/liba52/buildcleanup.patch new file mode 100644 index 000000000..5168100f3 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/liba52/liba52/buildcleanup.patch @@ -0,0 +1,89 @@ +It makes much more sense to control our own CFLAGS and avoiding fPIC breaks +some arches too. Assume we know what we're doing and remove all the messing +around. + +RP 23/2/10 + +Upstream-Status: Inappropriate [configuration] + +Index: a52dec-0.7.4/configure.in +=================================================================== +--- a52dec-0.7.4.orig/configure.in 2010-02-23 14:51:50.000000000 +0000 ++++ a52dec-0.7.4/configure.in 2010-02-23 14:52:36.000000000 +0000 +@@ -14,62 +14,6 @@ + AC_PROG_CC + AC_PROG_GCC_TRADITIONAL + +-if test x"$GCC" = x"yes"; then +- +- dnl GCC-specific flags - try to optimize them sometime +- dnl -Wall -Werror moved to the end to not disturb the configure script +- +- dnl -O3 +- changequote(<<,>>) +- OPT_CFLAGS=`echo "$CFLAGS"|sed "s/-O[0-9]*//g"` +- changequote([,]) +- OPT_CFLAGS="$OPT_CFLAGS -O3" +- AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]) +- +- dnl -fomit-frame-pointer +- OPT_CFLAGS="$CFLAGS -fomit-frame-pointer" +- AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]) +- +- dnl arch-specific flags +- case "$host" in +- i?86-* | k?-*) +- case "$host" in +- i386-*) OPT_CFLAGS="$CFLAGS -mcpu=i386";; +- i486-*) OPT_CFLAGS="$CFLAGS -mcpu=i486";; +- i586-*) OPT_CFLAGS="$CFLAGS -mcpu=pentium";; +- i686-*) OPT_CFLAGS="$CFLAGS -mcpu=pentiumpro";; +- k6-*) OPT_CFLAGS="$CFLAGS -mcpu=k6";; +- esac +- AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);; +- sparc-* | sparc64-*) +- OPT_CFLAGS="$CFLAGS -mtune=ultrasparc" +- AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);; +- mips-sgi-irix6.*) dnl do we need to be that specific ? +- OPT_CFLAGS="$CFLAGS -mabi=64" +- AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);; +- esac +-elif test x"$CC" = x"tcc" -a x"`$CC -version 2>&1 | grep TenDRA`" != x""; then +- dnl TenDRA portability checking compiler +- TENDRA=yes +- CFLAGS="-Xp -Yansi -f`pwd`/include/tendra.h -DELIDE_CODE" +- enable_mlib=no +- enable_oss=no +- enable_solaris_audio=no +-elif test x"$CC" = x"icc" -a x"`$CC -V 2>&1 | grep Intel`" != x""; then +- dnl Intel C++ compiler +- CFLAGS="-g -O3 -unroll -ip" +-else +- dnl non-gcc flags - we probably need exact configuration triplets here. +- case "$host" in +- mips-sgi-irix6.*) +- OPT_CFLAGS="$CFLAGS -64" +- AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);; +- sparc-sun-solaris*) +- OPT_CFLAGS="$CFLAGS -xCC -fast -xO5" +- AC_TRY_CFLAGS([$OPT_CFLAGS],[CFLAGS=$OPT_CFLAGS]);; +- esac +-fi +- + dnl Checks for libtool - this must be done after we set cflags + AC_DISABLE_SHARED + AC_LIBTOOL_WIN32_DLL +Index: a52dec-0.7.4/liba52/configure.incl +=================================================================== +--- a52dec-0.7.4.orig/liba52/configure.incl 2010-02-23 14:51:44.000000000 +0000 ++++ a52dec-0.7.4/liba52/configure.incl 2010-02-23 14:51:59.000000000 +0000 +@@ -1,9 +1,6 @@ + AC_SUBST([LIBA52_CFLAGS]) + AC_SUBST([LIBA52_LIBS]) + +-dnl avoid -fPIC when possible +-LIBA52_CFLAGS="$LIBA52_CFLAGS -prefer-non-pic" +- + AC_ARG_ENABLE([double], + [ --enable-double use double-precision samples]) + if test x"$enable_double" = x"yes"; then diff --git a/yocto-poky/meta/recipes-multimedia/liba52/liba52_0.7.4.bb b/yocto-poky/meta/recipes-multimedia/liba52/liba52_0.7.4.bb new file mode 100644 index 000000000..94b66b189 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/liba52/liba52_0.7.4.bb @@ -0,0 +1,23 @@ +SUMMARY = "ATSC A/52 surround sound stream decoder" +HOMEPAGE = "http://liba52.sourceforge.net/" +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \ + file://include/a52.h;beginline=1;endline=12;md5=81152ceb3562bf20a60d1b6018175dd1" +SECTION = "libs" +PR = "r4" + +inherit autotools + +SRC_URI = "http://liba52.sourceforge.net/files/a52dec-${PV}.tar.gz \ + file://buildcleanup.patch" + +SRC_URI[md5sum] = "caa9f5bc44232dc8aeea773fea56be80" +SRC_URI[sha256sum] = "a21d724ab3b3933330194353687df82c475b5dfb997513eef4c25de6c865ec33" +S = "${WORKDIR}/a52dec-${PV}" + +EXTRA_OECONF = " --enable-shared " + +PACKAGES =+ "a52dec a52dec-doc" + +FILES_a52dec = " ${bindir}/* " +FILES_a52dec-doc = " ${mandir}/man1/* " diff --git a/yocto-poky/meta/recipes-multimedia/libav/libav.inc b/yocto-poky/meta/recipes-multimedia/libav/libav.inc new file mode 100644 index 000000000..d3f4b1b55 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libav/libav.inc @@ -0,0 +1,146 @@ +SUMMARY = "Open source audio and video processing tools and librairies" +DESCRIPTION = "Libav is a friendly and community-driven effort to provide its users \ + with a set of portable, functional and high-performance libraries for \ + dealing with multimedia formats of all sorts. It originates from the \ + FFmpeg codebase, but goes its own way these days, providing its users \ + with reliable releases and a clear vision how to go forward." +HOMEPAGE = "http://libav.org/" +SECTION = "libs" + +LICENSE = "GPLv2+" +LICENSE_FLAGS = "commercial" + +LIC_FILES_CHKSUM = "file://COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \ + file://COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \ + file://COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02" + +SRC_URI = "http://libav.org/releases/${BP}.tar.xz" + +# Provides ffmpeg compat, see http://libav.org/about.html +PROVIDES = "ffmpeg" + +ARM_INSTRUCTION_SET = "arm" + +DEPENDS = "alsa-lib zlib libogg yasm-native" + +inherit autotools pkgconfig + +B = "${S}/build.${HOST_SYS}.${TARGET_SYS}" + +FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -fomit-frame-pointer -O4 -ffast-math" +BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}" + +EXTRA_FFCONF_armv7a = "--cpu=cortex-a8" +EXTRA_FFCONF ?= "" + +PACKAGECONFIG ??= "bzip2 x264 theora ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}" +PACKAGECONFIG[bzip2] = "--enable-bzlib,--disable-bzlib,bzip2" +PACKAGECONFIG[faac] = "--enable-libfaac,--disable-libfaac,faac" +PACKAGECONFIG[gsm] = "--enable-libgsm,--disable-libgsm,libgsm" +PACKAGECONFIG[jack] = "--enable-indev=jack,--disable-indev=jack,jack" +PACKAGECONFIG[libvorbis] = "--enable-libvorbis,--disable-libvorbis,libvorbis" +PACKAGECONFIG[mp3lame] = "--enable-libmp3lame,--disable-libmp3lame,lame" +PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl" +PACKAGECONFIG[schroedinger] = "--enable-libschroedinger,--disable-libschroedinger,schroedinger" +PACKAGECONFIG[speex] = "--enable-libspeex,--disable-libspeex,speex" +PACKAGECONFIG[theora] = "--enable-libtheora,--disable-libtheora,libtheora" +PACKAGECONFIG[vaapi] = "--enable-vaapi,--disable-vaapi,libva" +PACKAGECONFIG[vpx] = "--enable-libvpx,--disable-libvpx,libvpx" +PACKAGECONFIG[x11] = "--enable-x11grab,--disable-x11grab,virtual/libx11 libxfixes libxext xproto virtual/libsdl" +PACKAGECONFIG[x264] = "--enable-libx264,--disable-libx264,x264" + +# Check codecs that require --enable-nonfree +USE_NONFREE = "${@bb.utils.contains_any('PACKAGECONFIG', [ 'faac', 'openssl' ], 'yes', '', d)}" + +EXTRA_OECONF = " \ + --enable-shared \ + --enable-pthreads \ + --enable-gpl \ + ${@bb.utils.contains('USE_NONFREE', 'yes', '--enable-nonfree', '', d)} \ + --enable-avfilter \ + \ + --cross-prefix=${TARGET_PREFIX} \ + --prefix=${prefix} \ + \ + --enable-avserver \ + --enable-avplay \ + --ld="${CCLD}" \ + --arch=${TARGET_ARCH} \ + --target-os="linux" \ + --enable-cross-compile \ + --extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \ + --extra-ldflags="${TARGET_LDFLAGS}" \ + --sysroot="${STAGING_DIR_TARGET}" \ + --enable-hardcoded-tables \ + ${EXTRA_FFCONF} \ + --libdir=${libdir} \ + --shlibdir=${libdir} \ +" + +do_configure() { + # We don't have TARGET_PREFIX-pkgconfig + sed -i '/pkg_config_default="${cross_prefix}${pkg_config_default}"/d' ${S}/configure + mkdir -p ${B} + cd ${B} + ${S}/configure ${EXTRA_OECONF} + sed -i -e s:Os:O4:g ${B}/config.h +} + +do_install_append() { + install -m 0644 ${S}/libavfilter/*.h ${D}${includedir}/libavfilter/ +} + +PACKAGES += "${PN}-vhook-dbg ${PN}-vhook ffmpeg-x264-presets" +PACKAGES_DYNAMIC += "^lib(av(codec|device|filter|format|util)|swscale).*" + +RSUGGESTS_${PN} = "mplayer" +FILES_${PN} = "${bindir}" +FILES_${PN}-dev = "${includedir}/${PN}" + +FILES_${PN}-vhook = "${libdir}/vhook" +FILES_${PN}-vhook-dbg += "${libdir}/vhook/.debug" + +FILES_ffmpeg-x264-presets = "${datadir}/*.avpreset" + +LEAD_SONAME = "libavcodec.so" + +FILES_${PN}-dev = "${includedir}" + +python populate_packages_prepend() { + av_libdir = d.expand('${libdir}') + av_pkgconfig = d.expand('${libdir}/pkgconfig') + + # Runtime package + do_split_packages(d, av_libdir, '^lib(.*)\.so\..*', + output_pattern='lib%s', + description='libav %s library', + extra_depends='', + prepend=True, + allow_links=True) + + # Development packages (-dev, -staticdev) + do_split_packages(d, av_libdir, '^lib(.*)\.so$', + output_pattern='lib%s-dev', + description='libav %s development package', + extra_depends='${PN}-dev', + prepend=True, + allow_links=True) + do_split_packages(d, av_pkgconfig, '^lib(.*)\.pc$', + output_pattern='lib%s-dev', + description='libav %s development package', + extra_depends='${PN}-dev', + prepend=True) + do_split_packages(d, av_libdir, '^lib(.*)\.a$', + output_pattern='lib%s-staticdev', + description='libav %s development package - static library', + extra_depends='${PN}-dev', + prepend=True, + allow_links=True) + + if d.getVar('TARGET_ARCH', True) in [ 'i586', 'i686' ]: + # libav can't be build with -fPIC for 32-bit x86 + pkgs = d.getVar('PACKAGES', True).split() + for pkg in pkgs: + d.appendVar('INSANE_SKIP_%s' % pkg, ' textrel') +} diff --git a/yocto-poky/meta/recipes-multimedia/libav/libav/libav-fix-CVE-2014-9676.patch b/yocto-poky/meta/recipes-multimedia/libav/libav/libav-fix-CVE-2014-9676.patch new file mode 100644 index 000000000..1e31caa90 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libav/libav/libav-fix-CVE-2014-9676.patch @@ -0,0 +1,98 @@ +Upstream-Status: Backport + +Backport patch to fix CVE-2014-9676. + +https://security-tracker.debian.org/tracker/CVE-2014-9676 +https://git.libav.org/?p=libav.git;a=commit;h=b3f04657368a32a9903406395f865e230b1de348 + +Signed-off-by: Kai Kang <kai.kang@windriver.com> +--- +From b3f04657368a32a9903406395f865e230b1de348 Mon Sep 17 00:00:00 2001 +From: Luca Barbato <lu_zero@gentoo.org> +Date: Mon, 5 Jan 2015 10:40:41 +0100 +Subject: [PATCH] segment: Fix the failure paths + +A failure in segment_end() or segment_start() would lead to freeing +a dangling pointer and in general further calls to seg_write_packet() +or to seg_write_trailer() would have the same faulty behaviour. + +CC: libav-stable@libav.org +Reported-By: luodalongde@gmail.com +--- + libavformat/segment.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/libavformat/segment.c b/libavformat/segment.c +index 52da6b9..bcfd1f9 100644 +--- a/libavformat/segment.c ++++ b/libavformat/segment.c +@@ -184,6 +184,13 @@ static void close_null_ctx(AVIOContext *pb) + av_free(pb); + } + ++static void seg_free_context(SegmentContext *seg) ++{ ++ avio_closep(&seg->pb); ++ avformat_free_context(seg->avf); ++ seg->avf = NULL; ++} ++ + static int seg_write_header(AVFormatContext *s) + { + SegmentContext *seg = s->priv_data; +@@ -265,12 +272,9 @@ static int seg_write_header(AVFormatContext *s) + } + + fail: +- if (ret) { +- if (seg->list) +- avio_close(seg->pb); +- if (seg->avf) +- avformat_free_context(seg->avf); +- } ++ if (ret < 0) ++ seg_free_context(seg); ++ + return ret; + } + +@@ -282,6 +286,9 @@ static int seg_write_packet(AVFormatContext *s, AVPacket *pkt) + int64_t end_pts = seg->recording_time * seg->number; + int ret, can_split = 1; + ++ if (!oc) ++ return AVERROR(EINVAL); ++ + if (seg->has_video) { + can_split = st->codec->codec_type == AVMEDIA_TYPE_VIDEO && + pkt->flags & AV_PKT_FLAG_KEY; +@@ -322,11 +329,8 @@ static int seg_write_packet(AVFormatContext *s, AVPacket *pkt) + ret = ff_write_chained(oc, pkt->stream_index, pkt, s); + + fail: +- if (ret < 0) { +- if (seg->list) +- avio_close(seg->pb); +- avformat_free_context(oc); +- } ++ if (ret < 0) ++ seg_free_context(seg); + + return ret; + } +@@ -335,7 +339,11 @@ static int seg_write_trailer(struct AVFormatContext *s) + { + SegmentContext *seg = s->priv_data; + AVFormatContext *oc = seg->avf; +- int ret; ++ int ret = 0; ++ ++ if (!oc) ++ goto fail; ++ + if (!seg->write_header_trailer) { + if ((ret = segment_end(oc, 0)) < 0) + goto fail; +-- +2.4.1.314.g9532ead + diff --git a/yocto-poky/meta/recipes-multimedia/libav/libav_9.18.bb b/yocto-poky/meta/recipes-multimedia/libav/libav_9.18.bb new file mode 100644 index 000000000..210a649da --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libav/libav_9.18.bb @@ -0,0 +1,6 @@ +require libav.inc + +SRC_URI[md5sum] = "75e838068a75fb88e1b4ea0546bc16f0" +SRC_URI[sha256sum] = "0875e835da683eef1a7bac75e1884634194149d7479d1538ba9fbe1614d066d7" + +SRC_URI += "file://libav-fix-CVE-2014-9676.patch" diff --git a/yocto-poky/meta/recipes-multimedia/libav/libpostproc_git.bb b/yocto-poky/meta/recipes-multimedia/libav/libpostproc_git.bb new file mode 100644 index 000000000..4aaa50f91 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libav/libpostproc_git.bb @@ -0,0 +1,47 @@ +SUMMARY = "FFmpeg derived postprocessing library" +HOMEPAGE = "http://git.videolan.org/?p=libpostproc.git;a=summary" +SECTION = "libs" +DEPENDS = "libav" +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263" + +# because it depends on libav which has commercial flag +LICENSE_FLAGS = "commercial" + +PV = "52.3.0+git${SRCPV}" + +SRCREV = "811db3b957dfde24aef2d0f82e297e5bf552d873" +SRC_URI = "git://github.com/lu-zero/postproc;protocol=https" + +S = "${WORKDIR}/git" + +inherit autotools lib_package pkgconfig + +FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -fomit-frame-pointer -O4 -ffast-math" +BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}" + +EXTRA_FFCONF_armv7a = "--cpu=cortex-a8" +EXTRA_FFCONF ?= "" + +EXTRA_OECONF = " \ + --enable-shared \ + --enable-pthreads \ + --enable-gpl \ + --enable-postproc \ + \ + --cross-prefix=${TARGET_PREFIX} \ + --prefix=${prefix} \ + \ + --arch=${TARGET_ARCH} \ + --target-os="linux" \ + --enable-cross-compile \ + --extra-cflags="${TARGET_CFLAGS} ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" \ + --extra-ldflags="${TARGET_LDFLAGS}" \ + --sysroot="${STAGING_DIR_TARGET}" \ + --shlibdir="${libdir}" \ + ${EXTRA_FFCONF} \ +" + +do_configure() { + ${S}/configure ${EXTRA_OECONF} +} diff --git a/yocto-poky/meta/recipes-multimedia/libid3tag/libid3tag/addpkgconfig.patch b/yocto-poky/meta/recipes-multimedia/libid3tag/libid3tag/addpkgconfig.patch new file mode 100644 index 000000000..38d40c363 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libid3tag/libid3tag/addpkgconfig.patch @@ -0,0 +1,43 @@ +Upstream-Status: Inappropriate [configuration] + +Index: libid3tag-0.15.1b/Makefile.am +=================================================================== +--- libid3tag-0.15.1b.orig/Makefile.am 2009-07-29 09:29:20.000000000 +0100 ++++ libid3tag-0.15.1b/Makefile.am 2009-07-29 09:29:47.000000000 +0100 +@@ -27,6 +27,9 @@ + lib_LTLIBRARIES = libid3tag.la + include_HEADERS = id3tag.h + ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA = id3tag.pc ++ + ## From the libtool documentation on library versioning: + ## + ## CURRENT +Index: libid3tag-0.15.1b/configure.ac +=================================================================== +--- libid3tag-0.15.1b.orig/configure.ac 2009-07-29 09:27:15.000000000 +0100 ++++ libid3tag-0.15.1b/configure.ac 2009-07-29 09:27:45.000000000 +0100 +@@ -201,5 +201,5 @@ + dnl AC_SUBST(LTLIBOBJS) + + AC_CONFIG_FILES([Makefile msvc++/Makefile \ +- libid3tag.list]) ++ libid3tag.list id3tag.pc]) + AC_OUTPUT +Index: libid3tag-0.15.1b/id3tag.pc.in +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ libid3tag-0.15.1b/id3tag.pc.in 2009-07-29 09:29:10.000000000 +0100 +@@ -0,0 +1,11 @@ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ ++ ++Name: id3tag ++Description: ID3 tag reading library ++Requires: ++Version: @VERSION@ ++Libs: -L${libdir} -lid3tag -lz ++Cflags: -I${includedir} diff --git a/yocto-poky/meta/recipes-multimedia/libid3tag/libid3tag/obsolete_automake_macros.patch b/yocto-poky/meta/recipes-multimedia/libid3tag/libid3tag/obsolete_automake_macros.patch new file mode 100644 index 000000000..2845fb1d3 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libid3tag/libid3tag/obsolete_automake_macros.patch @@ -0,0 +1,15 @@ +Upstream-Status: Submitted [https://sourceforge.net/tracker/?func=detail&aid=3599280&group_id=12349&atid=112349] + +Signed-off-by: Marko Lindqvist <cazfi74@gmail.com> +diff -Nurd libid3tag-0.15.1b/configure.ac libid3tag-0.15.1b/configure.ac +--- libid3tag-0.15.1b/configure.ac 2004-01-24 01:22:46.000000000 +0200 ++++ libid3tag-0.15.1b/configure.ac 2013-01-03 06:41:02.734835014 +0200 +@@ -28,7 +28,7 @@ + +-AM_INIT_AUTOMAKE ++AM_INIT_AUTOMAKE([foreign]) + +-AM_CONFIG_HEADER([config.h]) ++AC_CONFIG_HEADERS([config.h]) + + dnl System type. diff --git a/yocto-poky/meta/recipes-multimedia/libid3tag/libid3tag_0.15.1b.bb b/yocto-poky/meta/recipes-multimedia/libid3tag/libid3tag_0.15.1b.bb new file mode 100644 index 000000000..05a8a4763 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libid3tag/libid3tag_0.15.1b.bb @@ -0,0 +1,22 @@ +SUMMARY = "Library for interacting with ID3 tags in MP3 files" +HOMEPAGE = "http://sourceforge.net/projects/mad/" +BUGTRACKER = "http://sourceforge.net/tracker/?group_id=12349&atid=112349" +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \ + file://COPYRIGHT;md5=5e6279efb87c26c6e5e7a68317a6a87a \ + file://version.h;beginline=1;endline=8;md5=86ac68b67f054b7afde9e149bbc3fe63" +SECTION = "libs" +DEPENDS = "zlib gperf-native" +PR = "r7" + +SRC_URI = "ftp://ftp.mars.org/pub/mpeg/libid3tag-${PV}.tar.gz \ + file://addpkgconfig.patch \ + file://obsolete_automake_macros.patch \ +" + +SRC_URI[md5sum] = "e5808ad997ba32c498803822078748c3" +SRC_URI[sha256sum] = "63da4f6e7997278f8a3fef4c6a372d342f705051d1eeb6a46a86b03610e26151" + +S = "${WORKDIR}/libid3tag-${PV}" + +inherit autotools pkgconfig diff --git a/yocto-poky/meta/recipes-multimedia/libmad/libmad/add-pkgconfig.patch b/yocto-poky/meta/recipes-multimedia/libmad/libmad/add-pkgconfig.patch new file mode 100644 index 000000000..b49dc8c98 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libmad/libmad/add-pkgconfig.patch @@ -0,0 +1,70 @@ +Here is a patch for adding pkg-config support to libmad. +It would make life a bit easier for distro maintainers if this was applied. +In case you didn't know, pkg-config is a tool for providing LDFLAGS and +CFLAGS for packages using shared libraries. It's on freedesktop.org. +Debian has already been distributing the pkg-config file mad.pc with +libmad for some time, and people developing on debian (notably xmms2 +developers) have started relying on this support being present, causing +some confusion for people installing from source and on some BSDs which +do not provide mad.pc (google: pkgconfig libmad). + +EMH + +Upstream-Status: Inappropriate [configuration] + +--h31gzZEtNLTqOjlF +Content-Type: text/plain; charset=us-ascii +Content-Disposition: attachment; filename="libmad-0.15.1b-pkgconfig.patch" + +diff -Naur libmad-0.15.1b.old/configure.ac libmad-0.15.1b/configure.ac +--- libmad-0.15.1b.old/configure.ac 2004-01-23 10:41:32.000000000 +0100 ++++ libmad-0.15.1b/configure.ac 2004-08-07 02:25:24.633462168 +0200 +@@ -429,5 +429,5 @@ + dnl AC_SUBST(LTLIBOBJS) + + AC_CONFIG_FILES([Makefile msvc++/Makefile \ +- libmad.list]) ++ libmad.list mad.pc]) + AC_OUTPUT +diff -Naur libmad-0.15.1b.old/mad.pc.in libmad-0.15.1b/mad.pc.in +--- libmad-0.15.1b.old/mad.pc.in 1970-01-01 01:00:00.000000000 +0100 ++++ libmad-0.15.1b/mad.pc.in 2004-08-07 02:04:59.617692872 +0200 +@@ -0,0 +1,14 @@ ++# libmad pkg-config source file ++ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ ++ ++Name: mad ++Description: MPEG Audio Decoder ++Version: @VERSION@ ++Requires: ++Conflicts: ++Libs: -L${libdir} -lmad -lm ++Cflags: -I${includedir} +diff -Naur libmad-0.15.1b.old/Makefile.am libmad-0.15.1b/Makefile.am +--- libmad-0.15.1b.old/Makefile.am 2004-02-17 03:02:03.000000000 +0100 ++++ libmad-0.15.1b/Makefile.am 2004-08-07 02:03:19.859858368 +0200 +@@ -24,6 +24,9 @@ + SUBDIRS = + DIST_SUBDIRS = msvc++ + ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA = mad.pc ++ + lib_LTLIBRARIES = libmad.la + include_HEADERS = mad.h + +@@ -34,7 +37,8 @@ + minimad_LDADD = libmad.la + + EXTRA_DIST = mad.h.sed \ +- CHANGES COPYRIGHT CREDITS README TODO VERSION ++ CHANGES COPYRIGHT CREDITS README TODO VERSION \ ++ mad.pc.in + + exported_headers = version.h fixed.h bit.h timer.h stream.h frame.h \ + synth.h decoder.h + diff --git a/yocto-poky/meta/recipes-multimedia/libmad/libmad/automake-foreign.patch b/yocto-poky/meta/recipes-multimedia/libmad/libmad/automake-foreign.patch new file mode 100644 index 000000000..3e544248d --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libmad/libmad/automake-foreign.patch @@ -0,0 +1,12 @@ +Pass foreign to AM_INIT_AUTOMAKE so it doesn't enforce GNU strictness. + +Upstream-Status: Pending +Signed-off-by: Ross Burton <ross.burton@intel.com> + +diff --git a/configure.ac b/configure.ac +index e602fd3..e075b86 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -29 +29 @@ AC_CONFIG_SRCDIR([decoder.h]) +-AM_INIT_AUTOMAKE ++AM_INIT_AUTOMAKE([foreign]) diff --git a/yocto-poky/meta/recipes-multimedia/libmad/libmad/fix_for_mips_with_gcc-4.5.0.patch b/yocto-poky/meta/recipes-multimedia/libmad/libmad/fix_for_mips_with_gcc-4.5.0.patch new file mode 100644 index 000000000..01c7aa3c8 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libmad/libmad/fix_for_mips_with_gcc-4.5.0.patch @@ -0,0 +1,33 @@ +gcc 4.4 did this: The MIPS port no longer recognizes the h asm constraint. It was necessary to remove this constraint in order to avoid generating unpredictable code sequences. + +so the libmad build with gcc-4.5.0 was failing. + +Found a solution here: + +http://us.generation-nt.com/answer/bug-568418-libmad0-dev-mpg321-compilation-errors-mips-mipsel-architectures-help-169033451.html + +Upstream-Status: Pending + +2010/07/29 +Nitin A Kamble <nitin.a.kamble@intel.com> + +Index: libmad-0.15.1b/fixed.h +=================================================================== +--- libmad-0.15.1b.orig/fixed.h ++++ libmad-0.15.1b/fixed.h +@@ -297,6 +297,15 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t + + /* --- MIPS ---------------------------------------------------------------- */ + ++# elif defined(FPM_MIPS) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) ++ typedef unsigned int u64_di_t __attribute__ ((mode (DI))); ++# define MAD_F_MLX(hi, lo, x, y) \ ++ do { \ ++ u64_di_t __ll = (u64_di_t) (x) * (y); \ ++ hi = __ll >> 32; \ ++ lo = __ll; \ ++ } while (0) ++ + # elif defined(FPM_MIPS) + + /* diff --git a/yocto-poky/meta/recipes-multimedia/libmad/libmad/no-force-mem.patch b/yocto-poky/meta/recipes-multimedia/libmad/libmad/no-force-mem.patch new file mode 100644 index 000000000..d5e6d206e --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libmad/libmad/no-force-mem.patch @@ -0,0 +1,18 @@ +This option no longer exists in gcc 3.4.1 + +RP - 18/07/2008 + +Upstream-Status: Inappropriate [configuration] + +Index: libmad-0.15.1b/configure.ac +=================================================================== +--- libmad-0.15.1b.orig/configure.ac 2008-07-18 15:45:30.000000000 +0100 ++++ libmad-0.15.1b/configure.ac 2008-07-18 15:45:37.000000000 +0100 +@@ -140,7 +140,6 @@ + case "$optimize" in + -O|"-O "*) + optimize="-O" +- optimize="$optimize -fforce-mem" + optimize="$optimize -fforce-addr" + : #x optimize="$optimize -finline-functions" + : #- optimize="$optimize -fstrength-reduce" diff --git a/yocto-poky/meta/recipes-multimedia/libmad/libmad/obsolete_automake_macros.patch b/yocto-poky/meta/recipes-multimedia/libmad/libmad/obsolete_automake_macros.patch new file mode 100644 index 000000000..cc87d299e --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libmad/libmad/obsolete_automake_macros.patch @@ -0,0 +1,14 @@ +Upstream-Status: Submitted [https://sourceforge.net/tracker/?group_id=12349&atid=112349] + +Signed-off-by: Marko Lindqvist <cazfi74@gmail.com> +diff -Nurd libmad-0.15.1b/configure.ac libmad-0.15.1b/configure.ac +--- libmad-0.15.1b/configure.ac 2004-01-23 11:41:32.000000000 +0200 ++++ libmad-0.15.1b/configure.ac 2013-01-03 08:28:23.718693697 +0200 +@@ -28,7 +28,7 @@ + + AM_INIT_AUTOMAKE + +-AM_CONFIG_HEADER([config.h]) ++AC_CONFIG_HEADERS([config.h]) + + dnl System type. diff --git a/yocto-poky/meta/recipes-multimedia/libmad/libmad_0.15.1b.bb b/yocto-poky/meta/recipes-multimedia/libmad/libmad_0.15.1b.bb new file mode 100644 index 000000000..9e08b16da --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libmad/libmad_0.15.1b.bb @@ -0,0 +1,38 @@ +SUMMARY = "MPEG Audio Decoder library" +HOMEPAGE = "http://sourceforge.net/projects/mad/" +BUGTRACKER = "http://sourceforge.net/tracker/?group_id=12349&atid=112349" +LICENSE = "GPLv2+" +LICENSE_FLAGS = "commercial" +LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \ + file://COPYRIGHT;md5=8e55eb14894e782b84488d5a239bc23d \ + file://version.h;beginline=1;endline=8;md5=aa07311dd39288d4349f28e1de516454" +SECTION = "libs" +DEPENDS = "libid3tag" +PR = "r3" + +SRC_URI = "ftp://ftp.mars.org/pub/mpeg/libmad-${PV}.tar.gz \ + file://no-force-mem.patch \ + file://add-pkgconfig.patch \ + file://fix_for_mips_with_gcc-4.5.0.patch \ + file://obsolete_automake_macros.patch \ + file://automake-foreign.patch \ +" + +SRC_URI[md5sum] = "1be543bc30c56fb6bea1d7bf6a64e66c" +SRC_URI[sha256sum] = "bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690" + +S = "${WORKDIR}/libmad-${PV}" + +inherit autotools pkgconfig + +EXTRA_OECONF = "-enable-speed --enable-shared" +# The ASO's don't take any account of thumb... +EXTRA_OECONF_append_thumb = " --disable-aso --enable-fpm=default" +EXTRA_OECONF_append_arm = " --enable-fpm=arm" + +do_configure_prepend () { +# damn picky automake... + touch NEWS AUTHORS ChangeLog +} + +ARM_INSTRUCTION_SET = "arm" diff --git a/yocto-poky/meta/recipes-multimedia/libogg/libogg_1.3.2.bb b/yocto-poky/meta/recipes-multimedia/libogg/libogg_1.3.2.bb new file mode 100644 index 000000000..0142e0f4f --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libogg/libogg_1.3.2.bb @@ -0,0 +1,17 @@ +SUMMARY = "Ogg bitstream and framing libary" +DESCRIPTION = "libogg is the bitstream and framing library \ +for the Ogg project. It provides functions which are \ +necessary to codec libraries like libvorbis." +HOMEPAGE = "http://xiph.org/" +BUGTRACKER = "https://trac.xiph.org/newticket" +SECTION = "libs" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://COPYING;md5=db1b7a668b2a6f47b2af88fb008ad555 \ + file://include/ogg/ogg.h;beginline=1;endline=11;md5=eda812856f13a3b1326eb8f020cc3b0b" + +SRC_URI = "http://downloads.xiph.org/releases/ogg/${BP}.tar.xz" + +SRC_URI[md5sum] = "5c3a34309d8b98640827e5d0991a4015" +SRC_URI[sha256sum] = "3f687ccdd5ac8b52d76328fbbfebc70c459a40ea891dbf3dccb74a210826e79b" + +inherit autotools pkgconfig diff --git a/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/configure-fix.patch b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/configure-fix.patch new file mode 100644 index 000000000..876e80ef7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/configure-fix.patch @@ -0,0 +1,58 @@ +To enable --disable-Werror for libomxil to avoid some compilers which check code strictly. + +For example, at least the following errors happened to some compilers: + +1) OMX_INDEXTYPE in include/OMX_Index.h IS NOT OMX_INDEXVENDORTYPE in src/base/omx_base_component.h +| i586-poky-linux-libtool: compile: i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/yocto-build5/poky/build/tmp/sysroots/qemux86 -DHAVE_Climinate-unused-debug-types -Wall -Werror -DCONFIG_DEBUG_LEVEL=0 -c OMXComponentRMExt.c -fPIC -DPIC -o .libs/libomxbase_la-OMXComponentRMExt.o +| omx_base_component.c: In function 'omx_base_component_GetParameter': +| omx_base_component.c:991:3: error: case value '2130706435' not in enumerated type 'OMX_INDEXTYPE' [-Werror=switch] +| omx_base_component.c:918:3: error: case value '2130706436' not in enumerated type 'OMX_INDEXTYPE' [-Werror=switch] + +2) +| i586-poky-linux-gcc -m32 -march=i586 --sysroot=/home/yocto-build5/poky/build/tmp/sysroots/qemux86 -DHAVE_CONFIG_H -I. -I.. -DOMXILCOMPOminate-unused-debug-types -Wall -Werror -DCONFIG_DEBUG_LEVEL=0 -c -o omxregister_bellagio-omxregister.o `test -f 'omxregister.c' || echo './'`o +| omxregister.c: In function 'buildComponentsList': +| omxregister.c:175:7: error: variable 'err' set but not used [-Werror=unused-but-set-variable] +| cc1: all warnings being treated as errors + +Upstream-Status: Inappropriate [configuration] + +Signed-off-by: Shane Wang <shane.wang@intel.com> + +diff -r 82d742d3ea90 configure.ac +--- a/configure.ac Tue Dec 27 15:30:35 2011 +0800 ++++ b/configure.ac Tue Dec 27 16:26:03 2011 +0800 +@@ -5,7 +5,7 @@ + AC_PREREQ([2.59]) + + AC_CONFIG_HEADERS([config.h]) +-CFLAGS="${CFLAGS} -Wall -Werror" ++CFLAGS="${CFLAGS} -Wall" + + ################################################################################ + # Set the shared versioning info, according to section 6.3 of the libtool info # +@@ -122,6 +122,14 @@ + [with_android=$enableval], + [with_android=no]) + ++AC_ARG_ENABLE( ++ [Werror], ++ [AC_HELP_STRING( ++ [--disable-Werror], ++ [whether to diable treating gcc warnings as errors])], ++ [with_Werror=$enableval], ++ [with_Werror=yes]) ++ + ################################################################################ + # Check for programs # + ################################################################################ +@@ -193,6 +201,10 @@ + CFG_DEBUG_LEVEL=255 + fi + ++if test "x$with_Werror" = "xyes"; then ++ CFLAGS="${CFLAGS} -Werror" ++fi ++ + AC_SUBST(CFG_DEBUG_LEVEL) + CFLAGS="${CFLAGS} -DCONFIG_DEBUG_LEVEL=$CFG_DEBUG_LEVEL" + diff --git a/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/disable-so-versioning.patch b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/disable-so-versioning.patch new file mode 100644 index 000000000..f408e4a62 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/disable-so-versioning.patch @@ -0,0 +1,36 @@ +Disable so versioning since they are really not a versioned shared lib. + +Upstream-Status: Submitted @ https://sourceforge.net/p/omxil/bugs/59/ + +Signed-off-by: Drew Moseley <drew_moseley@mentor.com> + +diff -rub libomxil-bellagio-0.9.3-orig/src/components/audio_effects/Makefile.am libomxil-bellagio-0.9.3/src/components/audio_effects/Makefile.am +--- libomxil-bellagio-0.9.3-orig/src/components/audio_effects/Makefile.am 2014-07-20 15:22:00.858425234 -0400 ++++ libomxil-bellagio-0.9.3/src/components/audio_effects/Makefile.am 2014-07-20 15:25:42.687525225 -0400 +@@ -10,4 +10,5 @@ + libomxaudio_effects_la_CFLAGS = -I$(top_srcdir)/include \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/base ++libomxaudio_effects_la_LDFLAGS = -avoid-version + +diff -rub libomxil-bellagio-0.9.3-orig/src/components/clocksrc/Makefile.am libomxil-bellagio-0.9.3/src/components/clocksrc/Makefile.am +--- libomxil-bellagio-0.9.3-orig/src/components/clocksrc/Makefile.am 2014-07-20 15:22:00.858425234 -0400 ++++ libomxil-bellagio-0.9.3/src/components/clocksrc/Makefile.am 2014-07-20 15:24:49.151259753 -0400 +@@ -10,4 +10,4 @@ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/base +- ++libomxclocksrc_la_LDFLAGS = -avoid-version +diff -rub libomxil-bellagio-0.9.3-orig/src/components/videoscheduler/Makefile.am libomxil-bellagio-0.9.3/src/components/videoscheduler/Makefile.am +--- libomxil-bellagio-0.9.3-orig/src/components/videoscheduler/Makefile.am 2014-07-20 15:22:00.862425254 -0400 ++++ libomxil-bellagio-0.9.3/src/components/videoscheduler/Makefile.am 2014-07-20 15:22:36.462601786 -0400 +@@ -6,7 +6,7 @@ + library_entry_point.c + + libomxvideosched_la_LIBADD = $(top_builddir)/src/libomxil-bellagio.la +-libomxvideosched_la_LDFLAGS = ++libomxvideosched_la_LDFLAGS = -avoid-version + libomxvideosched_la_CFLAGS = -I$(top_srcdir)/include \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/base diff --git a/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/dynamicloader-linking.patch b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/dynamicloader-linking.patch new file mode 100644 index 000000000..787953a99 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/dynamicloader-linking.patch @@ -0,0 +1,20 @@ +This patch fixes link issue when libomxdynamicloader.so is loaded : +Missing symbol RM_Deinit. + +This patch comes from "http://pkgs.fedoraproject.org/cgit/libomxil-bellagio.git/commit/?h=f17&id=4996a95828943d345e51ded6876c3103653eecf8" + +Upstream-Status: Pending + +Signed-off-by: Sébastien Mennetrier <s.mennetrier@innotis.org> + +--- a/src/dynamic_loader/Makefile.am 2014-02-25 15:29:10.128549636 +0100 ++++ b/src/dynamic_loader/Makefile.am 2014-02-25 15:30:15.756548808 +0100 +@@ -3,7 +3,7 @@ + omxdynamicloader_LTLIBRARIES = libomxdynamicloader.la + libomxdynamicloader_la_SOURCES = ste_dynamic_component_loader.c ste_dynamic_component_loader.h + +-libomxdynamicloader_la_LDFLAGS = ++libomxdynamicloader_la_LDFLAGS = -lomxil-bellagio -L$(top_builddir)/src/.libs + libomxdynamicloader_la_CFLAGS = -I$(top_srcdir)/include \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/base \ diff --git a/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/makefile-docdir-fix.patch b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/makefile-docdir-fix.patch new file mode 100644 index 000000000..dbe8c41f7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/makefile-docdir-fix.patch @@ -0,0 +1,19 @@ +This patch is to remove DESTDIR in docdir. +Otherwise, when users install by running `make install DESTDIR=/alternate/directory' specified in the file INSTALL, the doc will go into /alternate/directory/alternate/directory, which is not expected. + +Upstream-Status: Pending + +Signed-off-by: Shane Wang <shane.wang@intel.com> + +diff -r 30b597e4e70d Makefile.am +--- a/Makefile.am Wed Dec 28 15:38:35 2011 +0800 ++++ b/Makefile.am Wed Dec 28 15:39:25 2011 +0800 +@@ -7,7 +7,7 @@ + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = libomxil-bellagio.pc + +-docdir = $(DESTDIR)$(prefix)/share/doc/@PACKAGE@ ++docdir = $(prefix)/share/doc/@PACKAGE@ + doc_DATA = README \ + ChangeLog \ + TODO diff --git a/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/parallel-make.patch b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/parallel-make.patch new file mode 100644 index 000000000..483ca1328 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil-0.9.3/parallel-make.patch @@ -0,0 +1,18 @@ +This patch is to make libomxil Makefile support "make -jN". +The omxregister_bellagio stuffs depend on libomxil_bellagio library. + +Upstream-Status: Pending + +Signed-off-by: Shane Wang <shane.wang@intel.com> + +diff -r f59d077d3dd5 Makefile.am +--- a/src/Makefile.am Wed Dec 28 10:54:36 2011 +0800 ++++ b/src/Makefile.am Wed Dec 28 10:55:46 2011 +0800 +@@ -7,6 +7,7 @@ + omxregister_bellagio_SOURCES = omxregister.c common.c common.h + omxregister_bellagio_CFLAGS = -DOMXILCOMPONENTSPATH=\"$(plugindir)/\" \ + -I$(top_srcdir)/include ++omxregister_bellagio_LDADD = $(lib_LTLIBRARIES) + omxregister_bellagio_LDFLAGS = -lomxil-bellagio -L$(builddir) + + lib_LTLIBRARIES = libomxil-bellagio.la diff --git a/yocto-poky/meta/recipes-multimedia/libomxil/libomxil_0.9.3.bb b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil_0.9.3.bb new file mode 100644 index 000000000..40d6df8b6 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libomxil/libomxil_0.9.3.bb @@ -0,0 +1,39 @@ +SUMMARY = "Bellagio OpenMAX Integration Layer (IL)" +DESCRIPTION = "Bellagio is an opensource implementation of the Khronos OpenMAX \ + Integration Layer API to access multimedia components." +HOMEPAGE = "http://omxil.sourceforge.net/" + +LICENSE = "LGPLv2.1+" +LICENSE_FLAGS = "commercial" +LIC_FILES_CHKSUM = "file://COPYING;md5=ae6f0f4dbc7ac193b50f323a6ae191cb \ + file://src/omxcore.h;beginline=1;endline=27;md5=806b1e5566c06486fe8e42b461e03a90" + +SRC_URI = "${SOURCEFORGE_MIRROR}/omxil/libomxil-bellagio-${PV}.tar.gz \ + file://configure-fix.patch \ + file://parallel-make.patch \ + file://makefile-docdir-fix.patch \ + file://dynamicloader-linking.patch \ + file://disable-so-versioning.patch" + +SRC_URI[md5sum] = "a1de827fdb75c02c84e55f740ca27cb8" +SRC_URI[sha256sum] = "593c0729c8ef8c1467b3bfefcf355ec19a46dd92e31bfc280e17d96b0934d74c" + +S = "${WORKDIR}/${BPN}-bellagio-${PV}" + +inherit autotools + +EXTRA_OECONF += "--disable-doc --disable-Werror" + +# +# The .so files under ${libdir}/bellagio are not intended to be versioned and symlinked. +# Make sure they get packaged in the main package. +# +FILES_${PN} += "${libdir}/bellagio/*.so \ + ${libdir}/omxloaders/*${SOLIBS}" +FILES_${PN}-staticdev += "${libdir}/bellagio/*.a \ + ${libdir}/omxloaders/*.a" +FILES_${PN}-dev += "${libdir}/bellagio/*.la \ + ${libdir}/omxloaders/*.la \ + ${libdir}/omxloaders/*${SOLIBSDEV}" +FILES_${PN}-dbg += "${libdir}/bellagio/.debug/ \ + ${libdir}/omxloaders/.debug/" diff --git a/yocto-poky/meta/recipes-multimedia/libpng/libpng_1.6.17.bb b/yocto-poky/meta/recipes-multimedia/libpng/libpng_1.6.17.bb new file mode 100644 index 000000000..00e5808b9 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libpng/libpng_1.6.17.bb @@ -0,0 +1,27 @@ +SUMMARY = "PNG image format decoding library" +HOMEPAGE = "http://www.libpng.org/" +SECTION = "libs" +LICENSE = "Libpng" +LIC_FILES_CHKSUM = "file://LICENSE;md5=b9b75399b72e4a8656cf3a6ddfc86d9a \ + file://png.h;endline=16;md5=cc9c2d1eafda17e1277a6f99a9fc29c4 \ + file://png.h;beginline=242;endline=356;md5=599316819d525dde2bfdf28fe3f323af" +DEPENDS = "zlib" +LIBV = "16" + +SRC_URI = "${SOURCEFORGE_MIRROR}/project/libpng/libpng${LIBV}/${PV}/libpng-${PV}.tar.xz \ + " +SRC_URI[md5sum] = "430a9b76b78533235cd4b9b26ce75c7e" +SRC_URI[sha256sum] = "98507b55fbe5cd43c51981f2924e4671fd81fe35d52dc53357e20f2c77fa5dfd" + +BINCONFIG = "${bindir}/libpng-config ${bindir}/libpng16-config" + +inherit autotools binconfig-disabled pkgconfig + +# Work around missing symbols +EXTRA_OECONF_append_class-target = " ${@bb.utils.contains("TUNE_FEATURES", "neon", "--enable-arm-neon=on", "--enable-arm-neon=off" ,d)}" + +PACKAGES =+ "${PN}-tools" + +FILES_${PN}-tools = "${bindir}/png-fix-itxt ${bindir}/pngfix" + +BBCLASSEXTEND = "native nativesdk" diff --git a/yocto-poky/meta/recipes-multimedia/libsamplerate/libsamplerate0_0.1.8.bb b/yocto-poky/meta/recipes-multimedia/libsamplerate/libsamplerate0_0.1.8.bb new file mode 100644 index 000000000..f06935c8b --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libsamplerate/libsamplerate0_0.1.8.bb @@ -0,0 +1,18 @@ +SUMMARY = "Audio Sample Rate Conversion library" +HOMEPAGE = "http://www.mega-nerd.com/SRC/" +SECTION = "libs" +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \ + file://src/samplerate.c;beginline=1;endline=17;md5=d0807c35fc906466d24a50463534815a" +DEPENDS = "flac libsndfile1" +PR = "r1" + +SRC_URI = "http://www.mega-nerd.com/SRC/libsamplerate-${PV}.tar.gz" + +SRC_URI[md5sum] = "1c7fb25191b4e6e3628d198a66a84f47" +SRC_URI[sha256sum] = "93b54bdf46d5e6d2354b7034395fe329c222a966790de34520702bb9642f1c06" +S = "${WORKDIR}/libsamplerate-${PV}" + +inherit autotools pkgconfig + +PACKAGECONFIG[fftw] = ",--disable-fftw,fftw" diff --git a/yocto-poky/meta/recipes-multimedia/libsndfile/files/0001-src-sd2.c-Fix-segfault-in-SD2-RSRC-parser.patch b/yocto-poky/meta/recipes-multimedia/libsndfile/files/0001-src-sd2.c-Fix-segfault-in-SD2-RSRC-parser.patch new file mode 100644 index 000000000..cd48710fb --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libsndfile/files/0001-src-sd2.c-Fix-segfault-in-SD2-RSRC-parser.patch @@ -0,0 +1,211 @@ +From 9341e9c6e70cd3ad76c901c3cf052d4cb52fd827 Mon Sep 17 00:00:00 2001 +From: Erik de Castro Lopo <erikd@mega-nerd.com> +Date: Thu, 27 Jun 2013 18:04:03 +1000 +Subject: [PATCH] src/sd2.c : Fix segfault in SD2 RSRC parser. + +(Upstream commit 9341e9c6e70cd3ad76c901c3cf052d4cb52fd827) + +A specially crafted resource fork for an SD2 file can cause +the SD2 RSRC parser to read data from outside a dynamically +defined buffer. The data that is read is converted into a +short or int and used during further processing. + +Since no write occurs, this is unlikely to be exploitable. + +Bug reported by The Mayhem Team from Cylab, Carnegie Mellon +Univeristy. Paper is: +http://users.ece.cmu.edu/~arebert/papers/mayhem-oakland-12.pdf + +Upstream-Status: Backport + +Signed-off-by: Yue Tao <yue.tao@windriver.com> +--- + src/sd2.c | 93 ++++++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 55 insertions(+), 38 deletions(-) + +diff --git a/src/sd2.c b/src/sd2.c +index 35ce36b..6be150c 100644 +--- a/src/sd2.c ++++ b/src/sd2.c +@@ -1,5 +1,5 @@ + /* +-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com> ++** Copyright (C) 2001-2013 Erik de Castro Lopo <erikd@mega-nerd.com> + ** Copyright (C) 2004 Paavo Jumppanen + ** + ** This program is free software; you can redistribute it and/or modify +@@ -371,44 +371,61 @@ sd2_write_rsrc_fork (SF_PRIVATE *psf, int UNUSED (calc_length)) + */ + + static inline int +-read_char (const unsigned char * data, int offset) +-{ return data [offset] ; +-} /* read_char */ ++read_rsrc_char (const SD2_RSRC *prsrc, int offset) ++{ const unsigned char * data = prsrc->rsrc_data ; ++ if (offset < 0 || offset >= prsrc->rsrc_len) ++ return 0 ; ++ return data [offset] ; ++} /* read_rsrc_char */ + + static inline int +-read_short (const unsigned char * data, int offset) +-{ return (data [offset] << 8) + data [offset + 1] ; +-} /* read_short */ ++read_rsrc_short (const SD2_RSRC *prsrc, int offset) ++{ const unsigned char * data = prsrc->rsrc_data ; ++ if (offset < 0 || offset + 1 >= prsrc->rsrc_len) ++ return 0 ; ++ return (data [offset] << 8) + data [offset + 1] ; ++} /* read_rsrc_short */ + + static inline int +-read_int (const unsigned char * data, int offset) +-{ return (data [offset] << 24) + (data [offset + 1] << 16) + (data [offset + 2] << 8) + data [offset + 3] ; +-} /* read_int */ ++read_rsrc_int (const SD2_RSRC *prsrc, int offset) ++{ const unsigned char * data = prsrc->rsrc_data ; ++ if (offset < 0 || offset + 3 >= prsrc->rsrc_len) ++ return 0 ; ++ return (data [offset] << 24) + (data [offset + 1] << 16) + (data [offset + 2] << 8) + data [offset + 3] ; ++} /* read_rsrc_int */ + + static inline int +-read_marker (const unsigned char * data, int offset) +-{ ++read_rsrc_marker (const SD2_RSRC *prsrc, int offset) ++{ const unsigned char * data = prsrc->rsrc_data ; ++ ++ if (offset < 0 || offset + 3 >= prsrc->rsrc_len) ++ return 0 ; ++ + if (CPU_IS_BIG_ENDIAN) + return (data [offset] << 24) + (data [offset + 1] << 16) + (data [offset + 2] << 8) + data [offset + 3] ; +- else if (CPU_IS_LITTLE_ENDIAN) ++ if (CPU_IS_LITTLE_ENDIAN) + return data [offset] + (data [offset + 1] << 8) + (data [offset + 2] << 16) + (data [offset + 3] << 24) ; +- else +- return 0x666 ; +-} /* read_marker */ ++ ++ return 0 ; ++} /* read_rsrc_marker */ + + static void +-read_str (const unsigned char * data, int offset, char * buffer, int buffer_len) +-{ int k ; ++read_rsrc_str (const SD2_RSRC *prsrc, int offset, char * buffer, int buffer_len) ++{ const unsigned char * data = prsrc->rsrc_data ; ++ int k ; + + memset (buffer, 0, buffer_len) ; + ++ if (offset < 0 || offset + buffer_len >= prsrc->rsrc_len) ++ return ; ++ + for (k = 0 ; k < buffer_len - 1 ; k++) + { if (psf_isprint (data [offset + k]) == 0) + return ; + buffer [k] = data [offset + k] ; + } ; + return ; +-} /* read_str */ ++} /* read_rsrc_str */ + + static int + sd2_parse_rsrc_fork (SF_PRIVATE *psf) +@@ -435,17 +452,17 @@ sd2_parse_rsrc_fork (SF_PRIVATE *psf) + /* Reset the header storage because we have changed to the rsrcdes. */ + psf->headindex = psf->headend = rsrc.rsrc_len ; + +- rsrc.data_offset = read_int (rsrc.rsrc_data, 0) ; +- rsrc.map_offset = read_int (rsrc.rsrc_data, 4) ; +- rsrc.data_length = read_int (rsrc.rsrc_data, 8) ; +- rsrc.map_length = read_int (rsrc.rsrc_data, 12) ; ++ rsrc.data_offset = read_rsrc_int (&rsrc, 0) ; ++ rsrc.map_offset = read_rsrc_int (&rsrc, 4) ; ++ rsrc.data_length = read_rsrc_int (&rsrc, 8) ; ++ rsrc.map_length = read_rsrc_int (&rsrc, 12) ; + + if (rsrc.data_offset == 0x51607 && rsrc.map_offset == 0x20000) + { psf_log_printf (psf, "Trying offset of 0x52 bytes.\n") ; +- rsrc.data_offset = read_int (rsrc.rsrc_data, 0x52 + 0) + 0x52 ; +- rsrc.map_offset = read_int (rsrc.rsrc_data, 0x52 + 4) + 0x52 ; +- rsrc.data_length = read_int (rsrc.rsrc_data, 0x52 + 8) ; +- rsrc.map_length = read_int (rsrc.rsrc_data, 0x52 + 12) ; ++ rsrc.data_offset = read_rsrc_int (&rsrc, 0x52 + 0) + 0x52 ; ++ rsrc.map_offset = read_rsrc_int (&rsrc, 0x52 + 4) + 0x52 ; ++ rsrc.data_length = read_rsrc_int (&rsrc, 0x52 + 8) ; ++ rsrc.map_length = read_rsrc_int (&rsrc, 0x52 + 12) ; + } ; + + psf_log_printf (psf, " data offset : 0x%04X\n map offset : 0x%04X\n" +@@ -488,7 +505,7 @@ sd2_parse_rsrc_fork (SF_PRIVATE *psf) + goto parse_rsrc_fork_cleanup ; + } ; + +- rsrc.string_offset = rsrc.map_offset + read_short (rsrc.rsrc_data, rsrc.map_offset + 26) ; ++ rsrc.string_offset = rsrc.map_offset + read_rsrc_short (&rsrc, rsrc.map_offset + 26) ; + if (rsrc.string_offset > rsrc.rsrc_len) + { psf_log_printf (psf, "Bad string offset (%d).\n", rsrc.string_offset) ; + error = SFE_SD2_BAD_RSRC ; +@@ -497,7 +514,7 @@ sd2_parse_rsrc_fork (SF_PRIVATE *psf) + + rsrc.type_offset = rsrc.map_offset + 30 ; + +- rsrc.type_count = read_short (rsrc.rsrc_data, rsrc.map_offset + 28) + 1 ; ++ rsrc.type_count = read_rsrc_short (&rsrc, rsrc.map_offset + 28) + 1 ; + if (rsrc.type_count < 1) + { psf_log_printf (psf, "Bad type count.\n") ; + error = SFE_SD2_BAD_RSRC ; +@@ -513,11 +530,11 @@ sd2_parse_rsrc_fork (SF_PRIVATE *psf) + + rsrc.str_index = -1 ; + for (k = 0 ; k < rsrc.type_count ; k ++) +- { marker = read_marker (rsrc.rsrc_data, rsrc.type_offset + k * 8) ; ++ { marker = read_rsrc_marker (&rsrc, rsrc.type_offset + k * 8) ; + + if (marker == STR_MARKER) + { rsrc.str_index = k ; +- rsrc.str_count = read_short (rsrc.rsrc_data, rsrc.type_offset + k * 8 + 4) + 1 ; ++ rsrc.str_count = read_rsrc_short (&rsrc, rsrc.type_offset + k * 8 + 4) + 1 ; + error = parse_str_rsrc (psf, &rsrc) ; + goto parse_rsrc_fork_cleanup ; + } ; +@@ -549,26 +566,26 @@ parse_str_rsrc (SF_PRIVATE *psf, SD2_RSRC * rsrc) + for (k = 0 ; data_offset + data_len < rsrc->rsrc_len ; k++) + { int slen ; + +- slen = read_char (rsrc->rsrc_data, str_offset) ; +- read_str (rsrc->rsrc_data, str_offset + 1, name, SF_MIN (SIGNED_SIZEOF (name), slen + 1)) ; ++ slen = read_rsrc_char (rsrc, str_offset) ; ++ read_rsrc_str (rsrc, str_offset + 1, name, SF_MIN (SIGNED_SIZEOF (name), slen + 1)) ; + str_offset += slen + 1 ; + +- rsrc_id = read_short (rsrc->rsrc_data, rsrc->item_offset + k * 12) ; ++ rsrc_id = read_rsrc_short (rsrc, rsrc->item_offset + k * 12) ; + +- data_offset = rsrc->data_offset + read_int (rsrc->rsrc_data, rsrc->item_offset + k * 12 + 4) ; ++ data_offset = rsrc->data_offset + read_rsrc_int (rsrc, rsrc->item_offset + k * 12 + 4) ; + if (data_offset < 0 || data_offset > rsrc->rsrc_len) + { psf_log_printf (psf, "Exiting parser on data offset of %d.\n", data_offset) ; + break ; + } ; + +- data_len = read_int (rsrc->rsrc_data, data_offset) ; ++ data_len = read_rsrc_int (rsrc, data_offset) ; + if (data_len < 0 || data_len > rsrc->rsrc_len) + { psf_log_printf (psf, "Exiting parser on data length of %d.\n", data_len) ; + break ; + } ; + +- slen = read_char (rsrc->rsrc_data, data_offset + 4) ; +- read_str (rsrc->rsrc_data, data_offset + 5, value, SF_MIN (SIGNED_SIZEOF (value), slen + 1)) ; ++ slen = read_rsrc_char (rsrc, data_offset + 4) ; ++ read_rsrc_str (rsrc, data_offset + 5, value, SF_MIN (SIGNED_SIZEOF (value), slen + 1)) ; + + psf_log_printf (psf, " 0x%04x %4d %4d %3d '%s'\n", data_offset, rsrc_id, data_len, slen, value) ; + +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/libsndfile/files/0001-src-sd2.c-Fix-two-potential-buffer-read-overflows.patch b/yocto-poky/meta/recipes-multimedia/libsndfile/files/0001-src-sd2.c-Fix-two-potential-buffer-read-overflows.patch new file mode 100644 index 000000000..fa6473d4f --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libsndfile/files/0001-src-sd2.c-Fix-two-potential-buffer-read-overflows.patch @@ -0,0 +1,49 @@ +From dbe14f00030af5d3577f4cabbf9861db59e9c378 Mon Sep 17 00:00:00 2001 +From: Erik de Castro Lopo <erikd@mega-nerd.com> +Date: Thu, 25 Dec 2014 19:23:12 +1100 +Subject: [PATCH] src/sd2.c : Fix two potential buffer read overflows. + +(Upstream commit dbe14f00030af5d3577f4cabbf9861db59e9c378) + +Closes: https://github.com/erikd/libsndfile/issues/93 + +Upstream-Status: Backport + +Signed-off-by: Yue Tao <yue.tao@windriver.com> +--- + src/sd2.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/src/sd2.c b/src/sd2.c +index 0b4e5af..a70a1f1 100644 +--- a/src/sd2.c ++++ b/src/sd2.c +@@ -517,6 +517,11 @@ sd2_parse_rsrc_fork (SF_PRIVATE *psf) + + rsrc.type_offset = rsrc.map_offset + 30 ; + ++ if (rsrc.map_offset + 28 > rsrc.rsrc_len) ++ { psf_log_printf (psf, "Bad map offset.\n") ; ++ goto parse_rsrc_fork_cleanup ; ++ } ; ++ + rsrc.type_count = read_rsrc_short (&rsrc, rsrc.map_offset + 28) + 1 ; + if (rsrc.type_count < 1) + { psf_log_printf (psf, "Bad type count.\n") ; +@@ -533,7 +538,12 @@ sd2_parse_rsrc_fork (SF_PRIVATE *psf) + + rsrc.str_index = -1 ; + for (k = 0 ; k < rsrc.type_count ; k ++) +- { marker = read_rsrc_marker (&rsrc, rsrc.type_offset + k * 8) ; ++ { if (rsrc.type_offset + k * 8 > rsrc.rsrc_len) ++ { psf_log_printf (psf, "Bad rsrc marker.\n") ; ++ goto parse_rsrc_fork_cleanup ; ++ } ; ++ ++ marker = read_rsrc_marker (&rsrc, rsrc.type_offset + k * 8) ; + + if (marker == STR_MARKER) + { rsrc.str_index = k ; +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.25.bb b/yocto-poky/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.25.bb new file mode 100644 index 000000000..3e02f4ea7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.25.bb @@ -0,0 +1,33 @@ +SUMMARY = "Audio format Conversion library" +HOMEPAGE = "http://www.mega-nerd.com/libsndfile" +AUTHOR = "Erik de Castro Lopo" +DEPENDS = "sqlite3" +SECTION = "libs/multimedia" +LICENSE = "LGPLv2.1" +PR = "r2" + +SRC_URI = "http://www.mega-nerd.com/libsndfile/files/libsndfile-${PV}.tar.gz \ + file://0001-src-sd2.c-Fix-segfault-in-SD2-RSRC-parser.patch \ + file://0001-src-sd2.c-Fix-two-potential-buffer-read-overflows.patch \ +" + +SRC_URI[md5sum] = "e2b7bb637e01022c7d20f95f9c3990a2" +SRC_URI[sha256sum] = "59016dbd326abe7e2366ded5c344c853829bebfd1702ef26a07ef662d6aa4882" + +LIC_FILES_CHKSUM = "file://COPYING;md5=e77fe93202736b47c07035910f47974a" + +S = "${WORKDIR}/libsndfile-${PV}" + +PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)}" +PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib" + +EXTRA_OECONF = "--disable-external-libs" + +inherit autotools lib_package pkgconfig + +do_configure_prepend_arm() { + export ac_cv_sys_largefile_source=1 + export ac_cv_sys_file_offset_bits=64 + ac_cv_sizeof_off_t=8 +} + diff --git a/yocto-poky/meta/recipes-multimedia/libtheora/libtheora-1.1.1/no-docs.patch b/yocto-poky/meta/recipes-multimedia/libtheora/libtheora-1.1.1/no-docs.patch new file mode 100644 index 000000000..359f3d1a7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libtheora/libtheora-1.1.1/no-docs.patch @@ -0,0 +1,15 @@ +Upstream-Status: Inappropriate [configuration] + +Index: libtheora-1.1.1/Makefile.am +=================================================================== +--- libtheora-1.1.1.orig/Makefile.am 2009-11-25 22:01:53.593775926 +0100 ++++ libtheora-1.1.1/Makefile.am 2009-11-25 22:02:00.777524017 +0100 +@@ -8,7 +8,7 @@ + EXAMPLES_DIR = + endif + +-SUBDIRS = lib include doc tests m4 $(EXAMPLES_DIR) ++SUBDIRS = lib include tests m4 $(EXAMPLES_DIR) + + + # we include the whole debian/ dir in EXTRA_DIST because there's a problem diff --git a/yocto-poky/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb b/yocto-poky/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb new file mode 100644 index 000000000..18cb168c5 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libtheora/libtheora_1.1.1.bb @@ -0,0 +1,20 @@ +SUMMARY = "Theora Video Codec" +DESCRIPTION = "The libtheora reference implementation provides the standard encoder and decoder under a BSD license." +HOMEPAGE = "http://xiph.org/" +BUGTRACKER = "https://trac.xiph.org/newticket" +SECTION = "libs" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://COPYING;md5=cf91718f59eb6a83d06dc7bcaf411132" +DEPENDS = "libogg" + +PR = "r1" + +SRC_URI = "http://downloads.xiph.org/releases/theora/libtheora-${PV}.tar.bz2 \ + file://no-docs.patch" + +SRC_URI[md5sum] = "292ab65cedd5021d6b7ddd117e07cd8e" +SRC_URI[sha256sum] = "b6ae1ee2fa3d42ac489287d3ec34c5885730b1296f0801ae577a35193d3affbc" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--disable-examples" diff --git a/yocto-poky/meta/recipes-multimedia/libtiff/files/libtool2.patch b/yocto-poky/meta/recipes-multimedia/libtiff/files/libtool2.patch new file mode 100644 index 000000000..457202eae --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libtiff/files/libtool2.patch @@ -0,0 +1,19 @@ +Upstream-Status: Inappropriate [configuration] + +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: tiff-3.9.5/configure.ac +=================================================================== +--- tiff-3.9.5.orig/configure.ac ++++ tiff-3.9.5/configure.ac +@@ -27,7 +27,7 @@ dnl Process this file with autoconf to p + AC_PREREQ(2.64) + AC_INIT([LibTIFF Software],[3.9.5],[tiff@lists.maptools.org],[tiff]) + AC_CONFIG_AUX_DIR(config) +-AC_CONFIG_MACRO_DIR(m4) ++dnl AC_CONFIG_MACRO_DIR(m4) + AC_LANG(C) + + dnl Compute the canonical host (run-time) system type variable diff --git a/yocto-poky/meta/recipes-multimedia/libtiff/tiff_4.0.4.bb b/yocto-poky/meta/recipes-multimedia/libtiff/tiff_4.0.4.bb new file mode 100644 index 000000000..cf3a5f04c --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libtiff/tiff_4.0.4.bb @@ -0,0 +1,44 @@ +SUMMARY = "Provides support for the Tag Image File Format (TIFF)" +LICENSE = "BSD-2-Clause" +LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=34da3db46fab7501992f9615d7e158cf" +HOMEPAGE = "http://www.remotesensing.org/libtiff/" + +SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-${PV}.tar.gz \ + file://libtool2.patch \ + " + +SRC_URI[md5sum] = "9aee7107408a128c0c7b24286c0db900" +SRC_URI[sha256sum] = "8cb1d90c96f61cdfc0bcf036acc251c9dbe6320334da941c7a83cfe1576ef890" + +inherit autotools + +CACHED_CONFIGUREVARS = "ax_cv_check_gl_libgl=no" + +PACKAGECONFIG ?= "cxx jpeg zlib lzma \ + strip-chopping extrasample-as-alpha check-ycbcr-subsampling" + +PACKAGECONFIG[cxx] = "--enable-cxx,--disable-cxx,," +PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg," +PACKAGECONFIG[zlib] = "--enable-zlib,--disable-zlib,zlib," +PACKAGECONFIG[lzma] = "--enable-lzma,--disable-lzma,xz," + +# Convert single-strip uncompressed images to multiple strips of specified +# size (default: 8192) to reduce memory usage +PACKAGECONFIG[strip-chopping] = "--enable-strip-chopping,--disable-strip-chopping,," + +# Treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA +PACKAGECONFIG[extrasample-as-alpha] = "--enable-extrasample-as-alpha,--disable-extrasample-as-alpha,," + +# Control picking up YCbCr subsample info. Disable to support files lacking +# the tag +PACKAGECONFIG[check-ycbcr-subsampling] = "--enable-check-ycbcr-subsampling,--disable-check-ycbcr-subsampling,," + +# Support a mechanism allowing reading large strips (usually one strip files) +# in chunks when using TIFFReadScanline. Experimental 4.0+ feature +PACKAGECONFIG[chunky-strip-read] = "--enable-chunky-strip-read,--disable-chunky-strip-read,," + +PACKAGES =+ "tiffxx tiff-utils" +FILES_tiffxx = "${libdir}/libtiffxx.so.*" +FILES_tiff-utils = "${bindir}/*" + +BBCLASSEXTEND = "native" diff --git a/yocto-poky/meta/recipes-multimedia/libvorbis/libvorbis_1.3.5.bb b/yocto-poky/meta/recipes-multimedia/libvorbis/libvorbis_1.3.5.bb new file mode 100644 index 000000000..636e0f307 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/libvorbis/libvorbis_1.3.5.bb @@ -0,0 +1,17 @@ +SUMMARY = "Ogg Vorbis Audio Codec" +DESCRIPTION = "Ogg Vorbis is a high-quality lossy audio codec \ +that is free of intellectual property restrictions. libvorbis \ +is the main vorbis codec library." +HOMEPAGE = "http://www.vorbis.com/" +BUGTRACKER = "https://trac.xiph.org" +SECTION = "libs" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://COPYING;md5=7d2c487d2fc7dd3e3c7c465a5b7f6217 \ + file://include/vorbis/vorbisenc.h;beginline=1;endline=11;md5=d1c1d138863d6315131193d4046d81cb" +DEPENDS = "libogg" + +SRC_URI = "http://downloads.xiph.org/releases/vorbis/${BP}.tar.xz" +SRC_URI[md5sum] = "28cb28097c07a735d6af56e598e1c90f" +SRC_URI[sha256sum] = "54f94a9527ff0a88477be0a71c0bab09a4c3febe0ed878b24824906cd4b0e1d1" + +inherit autotools pkgconfig diff --git a/yocto-poky/meta/recipes-multimedia/mpeg2dec/mpeg2dec-0.4.1/altivec_h_needed.patch b/yocto-poky/meta/recipes-multimedia/mpeg2dec/mpeg2dec-0.4.1/altivec_h_needed.patch new file mode 100644 index 000000000..7dc56436f --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/mpeg2dec/mpeg2dec-0.4.1/altivec_h_needed.patch @@ -0,0 +1,43 @@ +Add new method to judge whether <altivec.h> is needed + +The original logic will use "typedef vector int t;" to judge +whether <altivec.h> is needed. altivec.h contains the following +statement: + + #if !defined(__APPLE_ALTIVEC__) + #define vector __vector + #define pixel __pixel + #define bool + #endif + +In gcc-4.3.3, __APPLE_ALTIVEC__ is not defined by compiler, neither +as vector, pixel, and bool. In order to make "typedef vector int t;" +pass the compilation, we need to include altivec.h. + +However in gcc-4.5.0, __APPLE_ALTIVEC__ is defined by compiler, +so as vector, pixel, and bool. We could not judge whether +altivec.h is needed by "typedef vector int t;". +Here we include another statement "int tmp = __CR6_EQ;", in +which __CR6_EQ is defined in altivec.h. + +Upstream-Status: Pending + +Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com> + +diff -ruN mpeg2dec-0.4.1-orig/configure.in mpeg2dec-0.4.1/configure.in +--- mpeg2dec-0.4.1-orig/configure.in 2010-09-14 20:55:42.399687663 +0800 ++++ mpeg2dec-0.4.1/configure.in 2010-09-14 20:56:43.403204648 +0800 +@@ -75,11 +75,11 @@ + CFLAGS="$OPT_CFLAGS $TRY_CFLAGS $CFLAGS" + AC_MSG_CHECKING([if <altivec.h> is needed]) + AC_TRY_COMPILE([], +- [typedef vector int t; ++ [typedef vector int t; int tmp = __CR6_EQ; + vec_ld(0, (unsigned char *)0);], + [have_altivec=yes; AC_MSG_RESULT(no)], + [AC_TRY_COMPILE([#include <altivec.h>], +- [typedef vector int t; vec_ld(0, (unsigned char *)0);], ++ [typedef vector int t; int tmp = __CR6_EQ; vec_ld(0, (unsigned char *)0);], + [AC_DEFINE([HAVE_ALTIVEC_H],, + [Define to 1 if you have the <altivec.h> header.]) + have_altivec=yes; AC_MSG_RESULT(yes)], diff --git a/yocto-poky/meta/recipes-multimedia/mpeg2dec/mpeg2dec_0.4.1.bb b/yocto-poky/meta/recipes-multimedia/mpeg2dec/mpeg2dec_0.4.1.bb new file mode 100644 index 000000000..cede2bf10 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/mpeg2dec/mpeg2dec_0.4.1.bb @@ -0,0 +1,38 @@ +SUMMARY = "Library and test program for decoding MPEG-2 and MPEG-1 video streams" +HOMEPAGE = "http://libmpeg2.sourceforge.net/" +SECTION = "libs" +LICENSE = "GPLv2+" +LICENSE_FLAGS = "commercial" +LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \ + file://include/mpeg2.h;beginline=1;endline=22;md5=ead62602d4638329d3b5b86a55803154" + +PR = "r2" + +SRC_URI = "http://libmpeg2.sourceforge.net/files/mpeg2dec-${PV}.tar.gz \ + file://altivec_h_needed.patch" + +SRC_URI[md5sum] = "7631b0a4bcfdd0d78c0bb0083080b0dc" +SRC_URI[sha256sum] = "c74a76068f8ec36d4bb59a03bf1157be44118ca02252180e8b358b0b5e3edeee" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--enable-shared --disable-sdl" + +PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}" +PACKAGECONFIG[x11] = "--with-x,--without-x,virtual/libx11 libxext libxv" + +PACKAGES = "mpeg2dec-dbg mpeg2dec mpeg2dec-doc libmpeg2 libmpeg2-dev libmpeg2convert libmpeg2convert-dev libmpeg2-staticdev libmpeg2convert-staticdev" + +FILES_${PN} = "${bindir}/*" +FILES_libmpeg2 = "${libdir}/libmpeg2.so.*" +FILES_libmpeg2convert = "${libdir}/libmpeg2convert.so.*" +FILES_libmpeg2-dev = "${libdir}/libmpeg2.so \ + ${libdir}/libmpeg2.la \ + ${libdir}/pkgconfig/libmpeg2.pc \ + ${includedir}/mpeg2dec/mpeg2.h" +FILES_libmpeg2-staticdev = "${libdir}/libmpeg2.a" +FILES_libmpeg2convert-dev = "${libdir}/libmpeg2convert.so \ + ${libdir}/libmpeg2convert.la \ + ${libdir}/pkgconfig/libmpeg2convert.pc \ + ${includedir}/mpeg2dec/mpeg2convert.h" +FILES_libmpeg2convert-staticdev = "${libdir}/libmpeg2convert.a" diff --git a/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio.inc b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio.inc new file mode 100644 index 000000000..5b806d761 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio.inc @@ -0,0 +1,197 @@ +SUMMARY = "Sound server for Linux and Unix-like operating systems" +HOMEPAGE = "http://www.pulseaudio.org" +AUTHOR = "Lennart Poettering" +SECTION = "libs/multimedia" +LICENSE = "GPLv2+ & LGPLv2.1" +LIC_FILES_CHKSUM = "file://GPL;md5=4325afd396febcb659c36b49533135d4 \ + file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \ + file://src/pulsecore/resampler.h;beginline=4;endline=21;md5=09794012ae16912c0270f3280cc8ff84" + +DEPENDS = "libatomic-ops liboil libsndfile1 libtool" +# optional +DEPENDS += "udev alsa-lib glib-2.0 gconf" +DEPENDS += "json-c gdbm speexdsp libxml-parser-perl-native libcap" + +inherit autotools pkgconfig useradd gettext perlnative bluetooth systemd + +# *.desktop rules wont be generated during configure and build will fail +# if using --disable-nls +USE_NLS = "yes" + +EXTRA_OECONF = "\ + --disable-hal-compat \ + --disable-orc \ + --enable-tcpwrap=no \ + --with-access-group=audio \ + --disable-openssl \ + --disable-xen \ + --with-database=simple \ + --without-fftw \ + --without-zsh-completion-dir \ + --with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d \ + ac_cv_header_valgrind_memcheck_h=no \ +" + +PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', '${BLUEZ}', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', '3g', 'ofono', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \ + dbus \ + " + +PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus" +PACKAGECONFIG[bluez4] = "--enable-bluez4,--disable-bluez4,bluez4 sbc" +PACKAGECONFIG[bluez5] = "--enable-bluez5,--disable-bluez5,bluez5 sbc" +PACKAGECONFIG[ofono] = "--enable-bluez5-ofono-headset,--disable-bluez5-ofono-headset,ofono" +PACKAGECONFIG[gtk] = "--enable-gtk3,--disable-gtk3,gtk+3" +PACKAGECONFIG[systemd] = "--enable-systemd-daemon --enable-systemd-login --enable-systemd-journal --with-systemduserunitdir=${systemd_user_unitdir},--disable-systemd-daemon --disable-systemd-login --disable-systemd-journal,systemd" +PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,virtual/libx11 libxtst libice libsm libxcb" +PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi" +PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack" +# Since many embedded systems don't have non-root users, it's useful to be +# able to use pulseaudio autospawn for root as well. +PACKAGECONFIG[autospawn-for-root] = ",,," + +EXTRA_OECONF_append_arm = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}" +EXTRA_OECONF_append_armeb = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}" + + +export TARGET_PFPU = "${TARGET_FPU}" + +# TODO: Use more fine granular version +#OE_LT_RPATH_ALLOW=":${libdir}/pulse-0.9:" +OE_LT_RPATH_ALLOW = "any" +OE_LT_RPATH_ALLOW[export]="1" + +set_cfg_value () { + sed -i -e "s/\(; *\)\?$2 =.*/$2 = $3/" "$1" + if ! grep -q "^$2 = $3\$" "$1"; then + die "Use of sed to set '$2' to '$3' in '$1' failed" + fi +} + +do_compile_append () { + if ${@bb.utils.contains('PACKAGECONFIG', 'autospawn-for-root', 'true', 'false', d)}; then + set_cfg_value src/client.conf allow-autospawn-for-root yes + fi +} + +do_install_append() { + install -d ${D}${sysconfdir}/default/volatiles + install -m 0644 ${WORKDIR}/volatiles.04_pulse ${D}${sysconfdir}/default/volatiles/volatiles.04_pulse +} + +USERADD_PACKAGES = "pulseaudio-server" +GROUPADD_PARAM_pulseaudio-server = "pulse" +USERADD_PARAM_pulseaudio-server = "--system --home /var/run/pulse \ + --no-create-home --shell /bin/false \ + --groups audio,pulse --gid pulse pulse" + +# The console-kit module is included here explicitly so bitbake can map to the +# RDEPENDS we define for it in this recipe, and thereby ensure that when +# adding the console-kit module to an image, we also get the necessary +# consolekit package produced. +PACKAGES =+ "libpulsecore libpulsecommon libpulse libpulse-simple libpulse-mainloop-glib \ + pulseaudio-server pulseaudio-misc ${@bb.utils.contains('PACKAGECONFIG', 'dbus', 'pulseaudio-module-console-kit', '', d)}" + +#upgrade path: +RREPLACES_pulseaudio-server = "libpulse-bin libpulse-conf" + +PACKAGES_DYNAMIC += "^pulseaudio-lib-.* ^pulseaudio-module-.*" + +FILES_libpulsecore = "${libdir}/libpulsecore*.so" +FILES_libpulsecommon = "${libdir}/pulseaudio/libpulsecommon*.so" + +# client.conf configures the behaviour of libpulse, so it belongs in the same +# package. +FILES_libpulse = "${libdir}/libpulse.so.* ${sysconfdir}/pulse/client.conf" + +FILES_libpulse-simple = "${libdir}/libpulse-simple.so.*" +FILES_libpulse-mainloop-glib = "${libdir}/libpulse-mainloop-glib.so.*" + +FILES_${PN}-dbg += "${libexecdir}/pulse/.debug \ + ${libdir}/pulse-${PV}/modules/.debug" +FILES_${PN}-dev += "${libdir}/pulse-${PV}/modules/*.la ${datadir}/vala ${libdir}/cmake" +FILES_${PN}-conf = "${sysconfdir}" +FILES_${PN}-bin += "${sysconfdir}/default/volatiles/volatiles.04_pulse" +FILES_${PN}-server = "${bindir}/pulseaudio ${bindir}/start-* ${sysconfdir} ${bindir}/pactl */udev/rules.d/*.rules */*/udev/rules.d/*.rules ${systemd_user_unitdir}/*" + +#SYSTEMD_PACKAGES = "${PN}-server" +SYSTEMD_SERVICE_${PN}-server = "pulseaudio.service" + +FILES_${PN}-misc = "${bindir}/* ${libdir}/pulseaudio/libpulsedsp.so" + +# Allow the pulseaudio package to be created empty as a placeholder (-dbg and -dev depend on it) +ALLOW_EMPTY_${PN} = "1" + +CONFFILES_libpulse = "${sysconfdir}/pulse/client.conf" + +CONFFILES_pulseaudio-server = "\ + ${sysconfdir}/pulse/default.pa \ + ${sysconfdir}/pulse/daemon.conf \ + ${sysconfdir}/pulse/system.pa \ + " + +pkg_postinst_${PN}-server() { + if [ -z "$D" ] && [ -e ${sysconfdir}/init.d/populate-volatile.sh ] ; then + ${sysconfdir}/init.d/populate-volatile.sh update + fi +} + +python populate_packages_prepend() { + #d.setVar('PKG_pulseaudio', 'pulseaudio') + + plugindir = d.expand('${libdir}/pulse-${PV}/modules/') + do_split_packages(d, plugindir, '^module-(.*)\.so$', 'pulseaudio-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True) + do_split_packages(d, plugindir, '^lib(.*)\.so$', 'pulseaudio-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True) +} + +RDEPENDS_pulseaudio-server = " \ + pulseaudio-module-filter-apply \ + pulseaudio-module-filter-heuristics \ + pulseaudio-module-udev-detect \ + pulseaudio-module-null-sink \ + pulseaudio-module-device-restore \ + pulseaudio-module-stream-restore \ + pulseaudio-module-card-restore \ + pulseaudio-module-augment-properties \ + pulseaudio-module-detect \ + pulseaudio-module-alsa-sink \ + pulseaudio-module-alsa-source \ + pulseaudio-module-alsa-card \ + pulseaudio-module-native-protocol-unix \ + pulseaudio-module-default-device-restore \ + pulseaudio-module-intended-roles \ + pulseaudio-module-rescue-streams \ + pulseaudio-module-always-sink \ + pulseaudio-module-suspend-on-idle \ + pulseaudio-module-position-event-sounds \ + pulseaudio-module-role-cork \ + pulseaudio-module-switch-on-port-available" + +# If the server is installed, it's usually desirable to make ALSA applications +# use PulseAudio. alsa-plugins-pulseaudio-conf will install the configuration +# that makes the PulseAudio plugin the default ALSA device. +RDEPENDS_pulseaudio-server += "alsa-plugins-pulseaudio-conf" + +# pulseaudio-module-console-kit is built whenever dbus is enabled by PACKAGECONFIG +# but consolekit depends on libx11 and is available only for DISTRO with x11 in DISTRO_FEATURES +RDEPENDS_pulseaudio-module-console-kit =+ "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d)}" +RDEPENDS_pulseaudio-misc += "pulseaudio-module-cli-protocol-unix" + +FILES_pulseaudio-module-gconf += "${libexecdir}/pulse/gconf-helper" +FILES_pulseaudio-module-alsa-card += "${datadir}/pulseaudio/alsa-mixer" + +# The console-kit module is good to have on X11 systems (it keeps PulseAudio +# running for the duration of the user login session). The device-manager and +# x11-* modules are referenced from the start-pulseaudio-x11 script, so those +# modules must be installed when X11 is enabled. +RDEPENDS_pulseaudio-server += "\ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '\ + pulseaudio-module-console-kit \ + pulseaudio-module-device-manager \ + pulseaudio-module-x11-cork-request \ + pulseaudio-module-x11-publish \ + pulseaudio-module-x11-xsmp \ + ', '', d)}" diff --git a/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch new file mode 100644 index 000000000..d19eb7c19 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch @@ -0,0 +1,92 @@ +From 1cb5647f76dc8cd7bacbce2a64fac9e6c2dc3b16 Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen <tanu.kaskinen@linux.intel.com> +Date: Tue, 28 Apr 2015 14:32:43 +0300 +Subject: [PATCH] client-conf: Add allow-autospawn-for-root + +Usually autospawning for root is a bad idea, since it can easily +interfere with other users' PulseAudio instances, but in embedded +environments where only root exists, autospawning is fine. + +Upstream-Status: Submitted [http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/23549] + +Signed-off-by: Tanu Kaskinen <tanu.kaskinen@linux.intel.com> +--- + man/pulse-client.conf.5.xml.in | 9 +++++++++ + src/pulse/client-conf.c | 1 + + src/pulse/client-conf.h | 1 + + src/pulse/client.conf.in | 1 + + src/pulse/context.c | 2 +- + 5 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/man/pulse-client.conf.5.xml.in b/man/pulse-client.conf.5.xml.in +index 1002dbe..0058490 100644 +--- a/man/pulse-client.conf.5.xml.in ++++ b/man/pulse-client.conf.5.xml.in +@@ -71,6 +71,15 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. + </option> + + <option> ++ <p><opt>allow-autospawn-for-root=</opt> Allow autospawning also for root. ++ Takes a boolean value, defaults to <opt>no</opt>. If the <opt>autospawn ++ </opt> option is disabled, this option has no effect. Autospawning for ++ root is disabled by default, because running PulseAudio as root will ++ interfere with regular users' PulseAudio instances. This option should be ++ enabled only in environments where there are no regular users at all.</p> ++ </option> ++ ++ <option> + <p><opt>daemon-binary=</opt> Path to the PulseAudio daemon to + run when autospawning. Defaults to a path configured at compile + time.</p> +diff --git a/src/pulse/client-conf.c b/src/pulse/client-conf.c +index 83331f8..0474583 100644 +--- a/src/pulse/client-conf.c ++++ b/src/pulse/client-conf.c +@@ -138,6 +138,7 @@ void pa_client_conf_load(pa_client_conf *c, bool load_from_x11, bool load_from_e + { "default-server", pa_config_parse_string, &c->default_server, NULL }, + { "default-dbus-server", pa_config_parse_string, &c->default_dbus_server, NULL }, + { "autospawn", pa_config_parse_bool, &c->autospawn, NULL }, ++ { "allow-autospawn-for-root", pa_config_parse_bool, &c->allow_autospawn_for_root, NULL }, + { "cookie-file", pa_config_parse_string, &c->cookie_file_from_client_conf, NULL }, + { "disable-shm", pa_config_parse_bool, &c->disable_shm, NULL }, + { "enable-shm", pa_config_parse_not_bool, &c->disable_shm, NULL }, +diff --git a/src/pulse/client-conf.h b/src/pulse/client-conf.h +index eac705a..131393a 100644 +--- a/src/pulse/client-conf.h ++++ b/src/pulse/client-conf.h +@@ -38,6 +38,7 @@ typedef struct pa_client_conf { + char *cookie_file_from_application; + char *cookie_file_from_client_conf; + bool autospawn, disable_shm, auto_connect_localhost, auto_connect_display; ++ bool allow_autospawn_for_root; + size_t shm_size; + } pa_client_conf; + +diff --git a/src/pulse/client.conf.in b/src/pulse/client.conf.in +index 26b7790..69830ef 100644 +--- a/src/pulse/client.conf.in ++++ b/src/pulse/client.conf.in +@@ -23,6 +23,7 @@ + ; default-dbus-server = + + ; autospawn = yes ++; allow-autospawn-for-root = no + ; daemon-binary = @PA_BINARY@ + ; extra-arguments = --log-target=syslog + +diff --git a/src/pulse/context.c b/src/pulse/context.c +index 4bc445f..d6c3f6d 100644 +--- a/src/pulse/context.c ++++ b/src/pulse/context.c +@@ -976,7 +976,7 @@ int pa_context_connect( + if (!(flags & PA_CONTEXT_NOAUTOSPAWN) && c->conf->autospawn) { + + #ifdef HAVE_GETUID +- if (getuid() == 0) ++ if (!c->conf->allow_autospawn_for_root && getuid() == 0) + pa_log_debug("Not doing autospawn since we are root."); + else { + c->do_autospawn = true; +-- +1.9.3 + diff --git a/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-conf-parser-add-support-for-.d-directories.patch b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-conf-parser-add-support-for-.d-directories.patch new file mode 100644 index 000000000..a9f1b2acf --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-conf-parser-add-support-for-.d-directories.patch @@ -0,0 +1,196 @@ +From 8cb643bbf0a287d67794e680d26f49c503f31053 Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen <tanu.kaskinen@linux.intel.com> +Date: Thu, 21 May 2015 21:00:59 +0300 +Subject: [PATCH] conf-parser: add support for .d directories + +This allows a configuration scheme where prior to loading +configuration from "somefile", the parser first loads configuration +from files in directory "somefile.d". This feature is currently +enabled only for client.conf and daemon.conf. + +This makes it easier to create configuration packages in distributions +when there's need to have different configuration in different setups. +For example, the graphical Sato environment in OpenEmbedded-core needs +to set allow-autospawn-for-root=true in client.conf, but the default +configuration in OpenEmbedded-core should not set that option. With +this patch, I can create a Sato-specific package that simply installs +50-sato.conf in /etc/pulse/client.conf.d without conflicting with the +main client.conf file coming from a different package. + +Upstream-Status: Submitted [http://thread.gmane.org/gmane.comp.audio.pulseaudio.general/23592] + +Signed-off-by: Tanu Kaskinen <tanu.kaskinen@linux.intel.com> +--- + src/daemon/daemon-conf.c | 2 +- + src/modules/alsa/alsa-mixer.c | 4 ++-- + src/modules/module-augment-properties.c | 2 +- + src/pulse/client-conf.c | 2 +- + src/pulsecore/conf-parser.c | 42 +++++++++++++++++++++++++++++++-- + src/pulsecore/conf-parser.h | 8 ++++++- + 6 files changed, 52 insertions(+), 8 deletions(-) + +diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c +index 21a8edb..1332fc6 100644 +--- a/src/daemon/daemon-conf.c ++++ b/src/daemon/daemon-conf.c +@@ -617,7 +617,7 @@ int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename) { + ci.default_channel_map_set = ci.default_sample_spec_set = false; + ci.conf = c; + +- r = f ? pa_config_parse(c->config_file, f, table, NULL, NULL) : 0; ++ r = f ? pa_config_parse(c->config_file, f, table, NULL, true, NULL) : 0; + + if (r >= 0) { + +diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c +index 2314612..988b4fe 100644 +--- a/src/modules/alsa/alsa-mixer.c ++++ b/src/modules/alsa/alsa-mixer.c +@@ -2483,7 +2483,7 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa + + fn = pa_maybe_prefix_path(fname, paths_dir); + +- r = pa_config_parse(fn, NULL, items, p->proplist, p); ++ r = pa_config_parse(fn, NULL, items, p->proplist, false, p); + pa_xfree(fn); + + if (r < 0) +@@ -4288,7 +4288,7 @@ pa_alsa_profile_set* pa_alsa_profile_set_new(const char *fname, const pa_channel + pa_run_from_build_tree() ? PA_SRCDIR "/modules/alsa/mixer/profile-sets/" : + PA_ALSA_PROFILE_SETS_DIR); + +- r = pa_config_parse(fn, NULL, items, NULL, ps); ++ r = pa_config_parse(fn, NULL, items, NULL, false, ps); + pa_xfree(fn); + + if (r < 0) +diff --git a/src/modules/module-augment-properties.c b/src/modules/module-augment-properties.c +index 42b6fd9..541f0e7 100644 +--- a/src/modules/module-augment-properties.c ++++ b/src/modules/module-augment-properties.c +@@ -204,7 +204,7 @@ static void update_rule(struct rule *r) { + table[0].data = &r->application_name; + table[1].data = &r->icon_name; + +- if (pa_config_parse(fn, NULL, table, NULL, r) < 0) ++ if (pa_config_parse(fn, NULL, table, NULL, false, r) < 0) + pa_log_warn("Failed to parse .desktop file %s.", fn); + + pa_xfree(fn); +diff --git a/src/pulse/client-conf.c b/src/pulse/client-conf.c +index 83331f8..3c3384d 100644 +--- a/src/pulse/client-conf.c ++++ b/src/pulse/client-conf.c +@@ -149,7 +149,7 @@ void pa_client_conf_load(pa_client_conf *c, bool load_from_x11, bool load_from_e + + f = pa_open_config_file(DEFAULT_CLIENT_CONFIG_FILE, DEFAULT_CLIENT_CONFIG_FILE_USER, ENV_CLIENT_CONFIG_FILE, &fn); + if (f) { +- pa_config_parse(fn, f, table, NULL, NULL); ++ pa_config_parse(fn, f, table, NULL, true, NULL); + pa_xfree(fn); + fclose(f); + } +diff --git a/src/pulsecore/conf-parser.c b/src/pulsecore/conf-parser.c +index 2dcd45a..d473232 100644 +--- a/src/pulsecore/conf-parser.c ++++ b/src/pulsecore/conf-parser.c +@@ -21,6 +21,7 @@ + #include <config.h> + #endif + ++#include <dirent.h> + #include <string.h> + #include <stdio.h> + #include <errno.h> +@@ -103,7 +104,7 @@ static int parse_line(pa_config_parser_state *state) { + } + } + +- r = pa_config_parse(fn, NULL, state->item_table, state->proplist, state->userdata); ++ r = pa_config_parse(fn, NULL, state->item_table, state->proplist, false, state->userdata); + pa_xfree(path); + return r; + } +@@ -152,8 +153,13 @@ static int parse_line(pa_config_parser_state *state) { + return normal_assignment(state); + } + ++static int conf_filter(const struct dirent *entry) { ++ return pa_endswith(entry->d_name, ".conf"); ++} ++ + /* Go through the file and parse each line */ +-int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, pa_proplist *proplist, void *userdata) { ++int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, pa_proplist *proplist, bool use_dot_d, ++ void *userdata) { + int r = -1; + bool do_close = !f; + pa_config_parser_state state; +@@ -163,6 +169,38 @@ int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, pa_p + + pa_zero(state); + ++ if (use_dot_d) { ++ char *dir_name; ++ int n; ++ struct dirent **entries = NULL; ++ ++ dir_name = pa_sprintf_malloc("%s.d", filename); ++ ++ n = scandir(dir_name, &entries, conf_filter, alphasort); ++ if (n >= 0) { ++ int i; ++ ++ for (i = 0; i < n; i++) { ++ char *filename2; ++ ++ filename2 = pa_sprintf_malloc("%s" PA_PATH_SEP "%s", dir_name, entries[i]->d_name); ++ pa_config_parse(filename2, NULL, t, proplist, false, userdata); ++ pa_xfree(filename2); ++ ++ free(entries[i]); ++ } ++ ++ free(entries); ++ } else { ++ if (errno == ENOENT) ++ pa_log_debug("scandir(\"%s\") failed: %s", dir_name, pa_cstrerror(errno)); ++ else ++ pa_log_warn("scandir(\"%s\") failed: %s", dir_name, pa_cstrerror(errno)); ++ } ++ ++ pa_xfree(dir_name); ++ } ++ + if (!f && !(f = pa_fopen_cloexec(filename, "r"))) { + if (errno == ENOENT) { + pa_log_debug("Failed to open configuration file '%s': %s", filename, pa_cstrerror(errno)); +diff --git a/src/pulsecore/conf-parser.h b/src/pulsecore/conf-parser.h +index dbb6f5c..cc20d7d 100644 +--- a/src/pulsecore/conf-parser.h ++++ b/src/pulsecore/conf-parser.h +@@ -59,6 +59,11 @@ struct pa_config_parser_state { + * pa_config_items in *t that is terminated by an item where lvalue is + * NULL. + * ++ * If use_dot_d is true, then before parsing the file named by the filename ++ * argument, the function will parse all files ending with ".conf" in ++ * alphabetical order from a directory whose name is filename + ".d", if such ++ * directory exists. ++ * + * Some configuration files may contain a Properties section, which + * is a bit special. Normally all accepted lvalues must be predefined + * in the pa_config_item table, but in the Properties section the +@@ -68,7 +73,8 @@ struct pa_config_parser_state { + * properties, and those properties will be merged into the given + * proplist. If proplist is NULL, then sections named "Properties" + * are not allowed at all in the configuration file. */ +-int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, pa_proplist *proplist, void *userdata); ++int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, pa_proplist *proplist, bool use_dot_d, ++ void *userdata); + + /* Generic parsers for integers, size_t, booleans and strings */ + int pa_config_parse_int(pa_config_parser_state *state); +-- +1.9.3 + diff --git a/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-padsp-Make-it-compile-on-musl.patch b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-padsp-Make-it-compile-on-musl.patch new file mode 100644 index 000000000..85559950e --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/0001-padsp-Make-it-compile-on-musl.patch @@ -0,0 +1,70 @@ +From f6ab3c3aa7a1841c8add04828029356d2a8c88e7 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Mon, 6 Apr 2015 21:56:31 -0700 +Subject: [PATCH] padsp: Make it compile on musl + +break assumptions on glibc and there is no stat64 on non +glibc C libraries + +See pulseaudio bug + +https://bugs.freedesktop.org/show_bug.cgi?id=85319 + +Upstream-Status: Pending +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- + src/utils/padsp.c | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +diff --git a/src/utils/padsp.c b/src/utils/padsp.c +index e61373c..684721a 100644 +--- a/src/utils/padsp.c ++++ b/src/utils/padsp.c +@@ -2368,7 +2368,7 @@ fail: + return ret; + } + +-#ifdef sun ++#ifndef __GLIBC__ + int ioctl(int fd, int request, ...) { + #else + int ioctl(int fd, unsigned long request, ...) { +@@ -2508,10 +2508,13 @@ int stat(const char *pathname, struct stat *buf) { + + return 0; + } +- + #ifdef HAVE_OPEN64 +- ++#undef stat64 ++#ifdef __GLIBC__ + int stat64(const char *pathname, struct stat64 *buf) { ++#else ++int stat64(const char *pathname, struct stat *buf) { ++#endif + struct stat oldbuf; + int ret; + +@@ -2544,7 +2547,7 @@ int stat64(const char *pathname, struct stat64 *buf) { + + return 0; + } +- ++#undef open64 + int open64(const char *filename, int flags, ...) { + va_list args; + mode_t mode = 0; +@@ -2670,8 +2673,8 @@ FILE* fopen(const char *filename, const char *mode) { + } + + #ifdef HAVE_OPEN64 +- +-FILE *fopen64(const char *filename, const char *mode) { ++#undef fopen64 ++FILE *fopen64(const char *__restrict filename, const char *__restrict mode) { + + debug(DEBUG_LEVEL_VERBOSE, __FILE__": fopen64(%s)\n", filename?filename:"NULL"); + +-- +2.1.4 + diff --git a/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/fix-git-version-gen.patch b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/fix-git-version-gen.patch new file mode 100644 index 000000000..ed9425040 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/fix-git-version-gen.patch @@ -0,0 +1,24 @@ +git-version-gen gets confused if a tarball is being built inside a git directory +(ie your build directory is a subdirectory of a poky clone), and ends up calling +the release 6.0-dirty. Add a shortcut exit so if a tarball is detected it +doesn't attempt to look at the git status. + +Upstream-Status: Submitted (https://bugs.freedesktop.org/show_bug.cgi?id=90936) +Signed-off-by: Ross Burton <ross.burton@intel.com> + +diff --git a/git-version-gen b/git-version-gen +index 7546884..079b93e 100755 +--- a/git-version-gen ++++ b/git-version-gen +@@ -84,7 +84,10 @@ then + v=`cat $tarball_version_file` || exit 1 + case $v in + *$nl*) v= ;; # reject multi-line output +- [0-9]*) ;; ++ [0-9]*) ++ echo "$v" | tr -d '\012' ++ exit 0 ++ ;; + *) v= ;; + esac + test -z "$v" \ diff --git a/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/volatiles.04_pulse b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/volatiles.04_pulse new file mode 100644 index 000000000..5b1998032 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio/volatiles.04_pulse @@ -0,0 +1,2 @@ +# <type> <owner> <group> <mode> <path> <linksource> +d pulse pulse 0755 /var/run/pulse none diff --git a/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio_6.0.bb b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio_6.0.bb new file mode 100644 index 000000000..31e909638 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/pulseaudio/pulseaudio_6.0.bb @@ -0,0 +1,16 @@ +require pulseaudio.inc + +SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/${BP}.tar.xz \ + file://0001-padsp-Make-it-compile-on-musl.patch \ + file://0001-client-conf-Add-allow-autospawn-for-root.patch \ + file://0001-conf-parser-add-support-for-.d-directories.patch \ + file://fix-git-version-gen.patch \ + file://volatiles.04_pulse \ +" +SRC_URI[md5sum] = "b691e83b7434c678dffacfa3a027750e" +SRC_URI[sha256sum] = "b50640e0b80b1607600accfad2e45aabb79d379bf6354c9671efa2065477f6f6" + +do_compile_prepend() { + mkdir -p ${S}/libltdl + cp ${STAGING_LIBDIR}/libltdl* ${S}/libltdl +} diff --git a/yocto-poky/meta/recipes-multimedia/sbc/sbc_1.3.bb b/yocto-poky/meta/recipes-multimedia/sbc/sbc_1.3.bb new file mode 100644 index 000000000..2d7f31bc1 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/sbc/sbc_1.3.bb @@ -0,0 +1,16 @@ +SUMMARY = "SBC Audio Codec" +DESCRIPTION = "Bluetooth low-complexity, subband codec (SBC) library." +HOMEPAGE = "https://www.bluez.org" +SECTION = "libs" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \ + file://sbc/sbc.h;beginline=1;endline=26;md5=0f57d0df22b0d40746bdd29805a4361b" + +DEPENDS = "libsndfile1" + +SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/${BP}.tar.xz" + +SRC_URI[md5sum] = "2d8b7841f2c11ab287718d562f2b981c" +SRC_URI[sha256sum] = "e61022cf576f14190241e7071753fdacdce5d1dea89ffd704110fc50be689309" + +inherit autotools pkgconfig diff --git a/yocto-poky/meta/recipes-multimedia/speex/speex_1.2rc2.bb b/yocto-poky/meta/recipes-multimedia/speex/speex_1.2rc2.bb new file mode 100644 index 000000000..f7d23dbd7 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/speex/speex_1.2rc2.bb @@ -0,0 +1,19 @@ +SUMMARY = "Speech Audio Codec" +DESCRIPTION = "Speex is an Open Source/Free Software patent-free audio compression format designed for speech." +HOMEPAGE = "http://www.speex.org" +SECTION = "libs" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://COPYING;md5=314649d8ba9dd7045dfb6683f298d0a8 \ + file://include/speex/speex.h;beginline=1;endline=34;md5=ef8c8ea4f7198d71cf3509c6ed05ea50" +DEPENDS = "libogg speexdsp" + +SRC_URI = "http://downloads.us.xiph.org/releases/speex/speex-${PV}.tar.gz" + +SRC_URI[md5sum] = "6ae7db3bab01e1d4b86bacfa8ca33e81" +SRC_URI[sha256sum] = "caa27c7247ff15c8521c2ae0ea21987c9e9710a8f2d3448e8b79da9806bce891" + +inherit autotools pkgconfig lib_package + +EXTRA_OECONF = "\ + ${@bb.utils.contains('TARGET_FPU', 'soft', '--enable-fixed-point --disable-float-api --disable-vbr', '', d)} \ +" diff --git a/yocto-poky/meta/recipes-multimedia/speex/speexdsp/0001-Don-t-rely-on-HAVE_STDINT_H-et-al.-being-defined.patch b/yocto-poky/meta/recipes-multimedia/speex/speexdsp/0001-Don-t-rely-on-HAVE_STDINT_H-et-al.-being-defined.patch new file mode 100644 index 000000000..c7067daaa --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/speex/speexdsp/0001-Don-t-rely-on-HAVE_STDINT_H-et-al.-being-defined.patch @@ -0,0 +1,63 @@ +From c73370ceafd138becee8ca3c688ba75756830bfe Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen <tanu.kaskinen@linux.intel.com> +Date: Sun, 5 Jul 2015 17:48:16 +0300 +Subject: [PATCH] Don't rely on HAVE_STDINT_H et al. being defined + +Not everyone who includes speexdsp_config_types.h will have a test +which defines those, and if we've chosen to use the stdint types at +configure time then we know exactly which header(s) are available, so +just choose the best one then and generate the header to use it. + +This patch, including the above text, is copied from a commit in the +speex repository[1]. The original commit for speex was made by Ron +<ron@debian.org>. + +[1] https://git.xiph.org/?p=speex.git;a=commitdiff;h=774c87d6cb7dd8dabdd17677fc6da753ecf4aa87 + +Upstream-Status: Backport + +Signed-off-by: Tanu Kaskinen <tanu.kaskinen@linux.intel.com> +--- + configure.ac | 6 ++++++ + include/speex/speexdsp_config_types.h.in | 8 +------- + 2 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 2cd2d1e..1de0c23 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -334,6 +334,12 @@ AC_SUBST([USIZE16]) + AC_SUBST([SIZE32]) + AC_SUBST([USIZE32]) + ++AS_IF([test "$ac_cv_header_stdint_h" = "yes"], [INCLUDE_STDINT="#include <stdint.h>"], ++ [test "$ac_cv_header_inttypes_h" = "yes"], [INCLUDE_STDINT="#include <inttypes.h>"], ++ [test "$ac_cv_header_sys_types_h" = "yes"], [INCLUDE_STDINT="#include <sys/types.h>"]) ++ ++AC_SUBST([INCLUDE_STDINT]) ++ + AC_CONFIG_FILES([ + Makefile libspeexdsp/Makefile doc/Makefile SpeexDSP.spec + include/Makefile include/speex/Makefile speexdsp.pc +diff --git a/include/speex/speexdsp_config_types.h.in b/include/speex/speexdsp_config_types.h.in +index 02b82fd..5ea7b55 100644 +--- a/include/speex/speexdsp_config_types.h.in ++++ b/include/speex/speexdsp_config_types.h.in +@@ -1,13 +1,7 @@ + #ifndef __SPEEX_TYPES_H__ + #define __SPEEX_TYPES_H__ + +-#if defined HAVE_STDINT_H +-# include <stdint.h> +-#elif defined HAVE_INTTYPES_H +-# include <inttypes.h> +-#elif defined HAVE_SYS_TYPES_H +-# include <sys/types.h> +-#endif ++@INCLUDE_STDINT@ + + typedef @SIZE16@ spx_int16_t; + typedef @USIZE16@ spx_uint16_t; +-- +1.9.3 + diff --git a/yocto-poky/meta/recipes-multimedia/speex/speexdsp_1.2rc3.bb b/yocto-poky/meta/recipes-multimedia/speex/speexdsp_1.2rc3.bb new file mode 100644 index 000000000..6b1acedbe --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/speex/speexdsp_1.2rc3.bb @@ -0,0 +1,39 @@ +SUMMARY = "A patent-free DSP library" +DESCRIPTION = "SpeexDSP is a patent-free, Open Source/Free Software DSP library." +HOMEPAGE = "http://www.speex.org" +SECTION = "libs" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://COPYING;md5=314649d8ba9dd7045dfb6683f298d0a8" + +SRC_URI = "http://downloads.xiph.org/releases/speex/speexdsp-${PV}.tar.gz \ + file://0001-Don-t-rely-on-HAVE_STDINT_H-et-al.-being-defined.patch" + +SRC_URI[md5sum] = "70d9d31184f7eb761192fd1ef0b73333" +SRC_URI[sha256sum] = "4ae688600039f5d224bdf2e222d2fbde65608447e4c2f681585e4dca6df692f1" + +inherit autotools pkgconfig + +EXTRA_OECONF = "\ + --disable-examples \ + ${@bb.utils.contains('TARGET_FPU', 'soft', '--enable-fixed-point --disable-float-api', '', d)} \ +" + +# Workaround for a build failure when building with MACHINE=qemuarm64. I think +# aarch64 is supposed to support NEON just fine, but building for qemuarm64 +# fails in NEON code: +# +# .../speexdsp-1.2rc3/libspeexdsp/resample_neon.h:148:5: error: impossible constraint in 'asm' +# asm volatile (" cmp %[len], #0\n" +# ^ +# +# I sent an email about the issue to speex-dev. At the time of writing there +# are no responses yet: +# http://thread.gmane.org/gmane.comp.audio.compression.speex.devel/7360 +EXTRA_OECONF += "${@bb.utils.contains('TUNE_FEATURES', 'aarch64', '--disable-neon', '', d)}" + +# speexdsp was split off from speex in 1.2rc2. Older versions of speex can't +# be installed together with speexdsp, since they contain overlapping files. +RCONFLICTS_${PN} = "speex (< 1.2rc2)" +RCONFLICTS_${PN}-dbg = "speex-dbg (< 1.2rc2)" +RCONFLICTS_${PN}-dev = "speex-dev (< 1.2rc2)" +RCONFLICTS_${PN}-staticdev = "speex-staticdev (< 1.2rc2)" diff --git a/yocto-poky/meta/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch b/yocto-poky/meta/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch new file mode 100644 index 000000000..7e5102903 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch @@ -0,0 +1,15 @@ +Upstream-Status: Submitted [https://trac.xiph.org/ticket/1922] + +Signed-off-by: Marko Lindqvist <cazfi74@gmail.com> +Index: configure.in +=================================================================== +--- configure.in (revision 18764) ++++ configure.in (working copy) +@@ -9,7 +9,7 @@ + AC_CANONICAL_HOST + AC_CANONICAL_TARGET + +-AM_CONFIG_HEADER([config.h]) ++AC_CONFIG_HEADERS([config.h]) + + AM_INIT_AUTOMAKE(libvorbisidec,1.2.1) diff --git a/yocto-poky/meta/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch b/yocto-poky/meta/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch new file mode 100644 index 000000000..204954222 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch @@ -0,0 +1,104 @@ +From: Xin Ouyang <Xin.Ouyang@windriver.com> +Date: Mon, 16 Jul 2012 13:29:34 +0800 +Subject: [PATCH] tremor: add IT instructions for arm thumb2 tune flags. + +Upstream-Status: Pending + +In Thumb-2, most instructions do not have a built in condition code (except for +conditional branches). Instead, short sequences of instructions which are to be +executed conditionally can be preceded by a special "IT instruction" which +describes the condition and which of the following instructions should be +executed if the condition is false respectively. + +For the ARM/Thumb IT(If-Then) instruction: +http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjabicci.html + +Signed-off-by: Xin Ouyang <Xin.Ouyang@windriver.com> +--- + asm_arm.h | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/asm_arm.h b/asm_arm.h +index c3bda00..823c54f 100755 +--- a/asm_arm.h ++++ b/asm_arm.h +@@ -108,9 +108,11 @@ static inline void XNPROD31(ogg_int32_t a, ogg_int32_t b, + static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) { + int tmp; + asm volatile("subs %1, %0, #32768\n\t" ++ "itt pl\n\t" + "movpl %0, #0x7f00\n\t" + "orrpl %0, %0, #0xff\n" + "adds %1, %0, #32768\n\t" ++ "it mi\n\t" + "movmi %0, #0x8000" + : "+r"(x),"=r"(tmp) + : +@@ -139,10 +141,12 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip, + + "ldmdb r0!,{r1,r3};" + "subs r1,r1,%4;" //ilsp[j]-wi ++ "it mi;" + "rsbmi r1,r1,#0;" //labs(ilsp[j]-wi) + "umull %0,r2,r1,%0;" //qi*=labs(ilsp[j]-wi) + + "subs r1,r3,%4;" //ilsp[j+1]-wi ++ "it mi;" + "rsbmi r1,r1,#0;" //labs(ilsp[j+1]-wi) + "umull %1,r3,r1,%1;" //pi*=labs(ilsp[j+1]-wi) + +@@ -167,6 +171,7 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip, + "mov r0,#0x4000;\n" + + "subs r1,r1,%4;\n" //ilsp[j]-wi ++ "it mi;\n" + "rsbmi r1,r1,#0;\n" //labs(ilsp[j]-wi) + "umull %0,r2,r1,%0;\n" //qi*=labs(ilsp[j]-wi) + "umull %1,r3,r0,%1;\n" //pi*=labs(ilsp[j+1]-wi) +@@ -190,18 +195,23 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip, + "mov r2,#0;" + "orr r1,%0,%1;" + "tst r1,#0xff000000;" ++ "itt ne;" + "addne r2,r2,#8;" + "movne r1,r1,lsr #8;" + "tst r1,#0x00f00000;" ++ "itt ne;" + "addne r2,r2,#4;" + "movne r1,r1,lsr #4;" + "tst r1,#0x000c0000;" ++ "itt ne;" + "addne r2,r2,#2;" + "movne r1,r1,lsr #2;" + "tst r1,#0x00020000;" ++ "itt ne;" + "addne r2,r2,#1;" + "movne r1,r1,lsr #1;" + "tst r1,#0x00010000;" ++ "it ne;" + "addne r2,r2,#1;" + "mov %0,%0,lsr r2;" + "mov %1,%1,lsr r2;" +@@ -222,15 +232,19 @@ static inline void lsp_norm_asm(ogg_uint32_t *qip,ogg_int32_t *qexpp){ + ogg_int32_t qexp=*qexpp; + + asm("tst %0,#0x0000ff00;" ++ "itt eq;" + "moveq %0,%0,lsl #8;" + "subeq %1,%1,#8;" + "tst %0,#0x0000f000;" ++ "itt eq;" + "moveq %0,%0,lsl #4;" + "subeq %1,%1,#4;" + "tst %0,#0x0000c000;" ++ "itt eq;" + "moveq %0,%0,lsl #2;" + "subeq %1,%1,#2;" + "tst %0,#0x00008000;" ++ "itt eq;" + "moveq %0,%0,lsl #1;" + "subeq %1,%1,#1;" + : "+r"(qi),"+r"(qexp) +-- +1.7.9.5 + diff --git a/yocto-poky/meta/recipes-multimedia/tremor/tremor_20150107.bb b/yocto-poky/meta/recipes-multimedia/tremor/tremor_20150107.bb new file mode 100644 index 000000000..937894a73 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/tremor/tremor_20150107.bb @@ -0,0 +1,27 @@ +SUMMARY = "Fixed-point decoder" +DESCRIPTION = "tremor is a fixed point implementation of the vorbis codec." +SECTION = "libs" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://COPYING;md5=db1b7a668b2a6f47b2af88fb008ad555 \ + file://os.h;beginline=3;endline=14;md5=5c0af5e1bedef3ce8178c89f48cd6f1f" +DEPENDS = "libogg" +SRCDATE = "${PV}" +PR = "r1" + +# SVN support for upstream version check isn't implemented yet +RECIPE_UPSTREAM_VERSION = "20150107" +RECIPE_UPSTREAM_DATE = "Jan 07, 2015" +CHECK_DATE = "Aug 12, 2015" + +SRC_URI = "svn://svn.xiph.org/trunk;module=Tremor;rev=19427;protocol=http \ + file://obsolete_automake_macros.patch;striplevel=0 \ + file://tremor-arm-thumb2.patch \ +" + +S = "${WORKDIR}/Tremor" + +inherit autotools pkgconfig + +EXTRA_OECONF = "--enable-shared" + +ARM_INSTRUCTION_SET = "arm" diff --git a/yocto-poky/meta/recipes-multimedia/webp/libwebp_0.4.3.bb b/yocto-poky/meta/recipes-multimedia/webp/libwebp_0.4.3.bb new file mode 100644 index 000000000..c4b80f6cf --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/webp/libwebp_0.4.3.bb @@ -0,0 +1,47 @@ +SUMMARY = "WebP is an image format designed for the Web" +DESCRIPTION = "WebP is a method of lossy and lossless compression that can be \ + used on a large variety of photographic, translucent and \ + graphical images found on the web. The degree of lossy \ + compression is adjustable so a user can choose the trade-off \ + between file size and image quality. WebP typically achieves \ + an average of 30% more compression than JPEG and JPEG 2000, \ + without loss of image quality." +HOMEPAGE = "https://developers.google.com/speed/webp/" +SECTION = "libs" + +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://COPYING;md5=6e8dee932c26f2dab503abf70c96d8bb \ + file://PATENTS;md5=ad2580aee35468675c44d7bebba65ca8" + +SRC_URI = "http://downloads.webmproject.org/releases/webp/${BP}.tar.gz" +SRC_URI[md5sum] = "08813525eeeffe7e305b4cbfade8ae9b" +SRC_URI[sha256sum] = "efbe0d58fda936f2ed99d0b837ed7087d064d6838931f282c4618d2a3f7390c4" + +EXTRA_OECONF = " \ + --disable-experimental \ + --disable-wic \ + --enable-libwebpmux \ + --enable-libwebpdemux \ + --enable-threading \ +" + +inherit autotools lib_package + +PACKAGECONFIG ??= "" + +# libwebpdecoder is a subset of libwebp, don't build it unless requested +PACKAGECONFIG[decoder] = "--enable-libwebpdecoder,--disable-libwebpdecoder" + +# Apply for examples programs: cwebp and dwebp +PACKAGECONFIG[gif] = "--enable-gif,--disable-gif,giflib" +PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg" +PACKAGECONFIG[png] = "--enable-png,--disable-png,,libpng" +PACKAGECONFIG[tiff] = "--enable-tiff,--disable-tiff,tiff" + +# Apply only for example program vwebp +PACKAGECONFIG[gl] = "--enable-gl,--disable-gl,mesa-glut" + +PACKAGES =+ "${PN}-gif2webp" + +DESCRIPTION_${PN}-gif2webp = "Simple tool to convert animated GIFs to WebP" +FILES_${PN}-gif2webp = "${bindir}/gif2webp" diff --git a/yocto-poky/meta/recipes-multimedia/x264/x264/don-t-default-to-cortex-a9-with-neon.patch b/yocto-poky/meta/recipes-multimedia/x264/x264/don-t-default-to-cortex-a9-with-neon.patch new file mode 100644 index 000000000..bf72fca68 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/x264/x264/don-t-default-to-cortex-a9-with-neon.patch @@ -0,0 +1,29 @@ +-march flag is not in CFLAGS so this will always default to -mcpu=cortex-a8 +-mfpu=neon. + +Upstream-Status: Pending +Signed-off-by: Andrei Gherzan <andrei@gherzan.ro> + +diff --git a/configure b/configure +index 2916036..f4ece40 100755 +--- a/configure ++++ b/configure +@@ -773,9 +773,6 @@ if [ $asm = auto -a \( $ARCH = X86 -o $ARCH = X86_64 \) ] ; then + fi + + if [ $asm = auto -a $ARCH = ARM ] ; then +- # set flags so neon is built by default +- echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu)' || CFLAGS="$CFLAGS -mcpu=cortex-a8 -mfpu=neon" +- + if cc_check '' '' '__asm__("rev ip, ip");' ; then define HAVE_ARMV6 + cc_check '' '' '__asm__("movt r0, #0");' && define HAVE_ARMV6T2 + cc_check '' '' '__asm__("vadd.i16 q0, q0, q0");' && define HAVE_NEON +@@ -788,8 +785,6 @@ if [ $asm = auto -a $ARCH = ARM ] ; then + fi + + if [ $asm = auto -a $ARCH = AARCH64 ] ; then +- # set flags so neon is built by default +- echo $CFLAGS | grep -Eq '(-mcpu|-march|-mfpu|-arch)' || CFLAGS="$CFLAGS -arch arm64 -mfpu=neon" + + if cc_check '' '' '__asm__("cmeq v0.8h, v0.8h, #0");' ; then define HAVE_NEON + ASFLAGS="$ASFLAGS -c" diff --git a/yocto-poky/meta/recipes-multimedia/x264/x264_git.bb b/yocto-poky/meta/recipes-multimedia/x264/x264_git.bb new file mode 100644 index 000000000..0a6990980 --- /dev/null +++ b/yocto-poky/meta/recipes-multimedia/x264/x264_git.bb @@ -0,0 +1,55 @@ +SUMMARY = "H.264/MPEG-4 AVC video encoder" +DESCRIPTION = "A free software library and application for encoding video streams into the H.264/MPEG-4 AVC format." +HOMEPAGE = "http://www.videolan.org/developers/x264.html" + +LICENSE = "GPLv2" +LICENSE_FLAGS = "commercial" +LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f" + +DEPENDS = "yasm-native" + +SRC_URI = "git://git.videolan.org/x264.git \ + file://don-t-default-to-cortex-a9-with-neon.patch \ + " + +SRCREV = "c8a773ebfca148ef04f5a60d42cbd7336af0baf6" + +PV = "r2491+git${SRCPV}" + +S = "${WORKDIR}/git" + +inherit lib_package pkgconfig perlnative + +X264_DISABLE_ASM = "" +X264_DISABLE_ASM_armv4 = "--disable-asm" +X264_DISABLE_ASM_armv5 = "--disable-asm" +X264_DISABLE_ASM_powerpc = "${@bb.utils.contains("TUNE_FEATURES", "spe", "--disable-asm", "", d)}" + +EXTRA_OECONF = '--prefix=${prefix} \ + --host=${HOST_SYS} \ + --libdir=${libdir} \ + --cross-prefix=${TARGET_PREFIX} \ + --sysroot=${STAGING_DIR_TARGET} \ + --enable-shared \ + --enable-static \ + --disable-lavf \ + --disable-swscale \ + --enable-pic \ + ${X264_DISABLE_ASM} \ + ' + +do_configure() { + ./configure ${EXTRA_OECONF} +} + +# Get rid of -e +EXTRA_OEMAKE = "" +AS = "${TARGET_PREFIX}gcc" + +do_install() { + oe_runmake install DESTDIR=${D} +} + +# PIC can't be enabled for 32-bit x86 +INSANE_SKIP_${PN}_append_x86 = " textrel" + |