diff options
Diffstat (limited to 'common')
81 files changed, 3899 insertions, 99 deletions
diff --git a/common/recipes-devtools/gcc/libgcc_4.8.bbappend b/common/recipes-devtools/gcc/libgcc_4.8.bbappend deleted file mode 100644 index 1f9888d..0000000 --- a/common/recipes-devtools/gcc/libgcc_4.8.bbappend +++ /dev/null @@ -1,38 +0,0 @@ -do_install_append () { - BINVER=`${TARGET_PREFIX}gcc -dumpversion` - if [ ${BINVER} != ${BINV} ] ; then - rm -rf ${D}${libdir}/${TARGET_SYS}/${BINVER}/include - SRC=${D}${libdir}/${TARGET_SYS}/${BINV} - DEST=${D}${libdir}/${TARGET_SYS}/${BINVER} - install -d ${SRC} ${DEST} - for f in ${SRC}/* - do - cp ${f} ${DEST} - done - fi -} - -python do_package_prepend () { - import subprocess - subfolder = "*crt* 64 32 x32 n32 libgcc*" - cc = d.getVar('TARGET_PREFIX', True) + 'gcc' - cmd = subprocess.Popen([cc, "-dumpversion"], stdout=subprocess.PIPE) - out, err = cmd.communicate() - version = out.split()[-1] - binv = d.getVar('BINV', True) - if (version != binv): - pn = d.getVar('PN', True) - libdir = d.getVar('libdir', True) - targetsys = d.getVar('TARGET_SYS', True) - appendprefix = ' ' + libdir + '/' + targetsys + '/' + version + '/' - appends = '' - for i in subfolder.split(): - appends = appends + appendprefix + i - d.appendVar("FILES_" + pn + "-dev", appends) - if bb.data.inherits_class('nativesdk', d): - packages_libgcov = 'FILES_nativesdk-libgcov-dev' - else: - packages_libgcov = 'FILES_libgcov-dev' - d.appendVar(packages_libgcov, appendprefix + "libgcov.a") -} - diff --git a/common/recipes-devtools/qemu/qemu_%.bbappend b/common/recipes-devtools/qemu/qemu_%.bbappend deleted file mode 100644 index e860069..0000000 --- a/common/recipes-devtools/qemu/qemu_%.bbappend +++ /dev/null @@ -1 +0,0 @@ -INSANE_SKIP_${PN} += "textrel" diff --git a/common/recipes-gnome/gtk+/gtk+_2.24.%.bbappend b/common/recipes-gnome/gtk+/gtk+_2.24.%.bbappend deleted file mode 100644 index 6fc9264..0000000 --- a/common/recipes-gnome/gtk+/gtk+_2.24.%.bbappend +++ /dev/null @@ -1,26 +0,0 @@ -PACKAGESPLITFUNCS_prepend += " add_private_libs_packages " - -python add_private_libs_packages () { - import os - import re - - gtk_libdir = d.expand('${libdir}/gtk-2.0/${LIBV}') - immodules_root = os.path.join(gtk_libdir, 'immodules') - printmodules_root = os.path.join(gtk_libdir, 'printbackends'); - - dvar = d.getVar('PKGD', True) - - for dirpath, dirnames, filenames in os.walk(dvar + immodules_root): - for f in filenames: - m = re.match('^im-(.*)\.so$', f) - if m: - immodule = m.group(1) - d.setVar('PRIVATE_LIBS_' + 'gtk-immodule-' + immodule , 'im-' + immodule + '.so') - - for dirpath, dirnames, filenames in os.walk(dvar + printmodules_root): - for f in filenames: - m = re.match('^libprintbackend-(.*)\.so$', f) - if m: - printbackend = m.group(1) - d.setVar('PRIVATE_LIBS_' + 'gtk-printbackend-' + printbackend , 'libprintbackend-' + printbackend + '.so') -}
\ No newline at end of file diff --git a/common/recipes-multimedia/gstreamer/files/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch b/common/recipes-multimedia/gstreamer/files/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/files/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch diff --git a/common/recipes-multimedia/gstreamer/files/0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch b/common/recipes-multimedia/gstreamer/files/0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch new file mode 100644 index 0000000..c934336 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/files/0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch @@ -0,0 +1,22 @@ +diff -Napur gstreamer-1.2.3.orig/common/m4/introspection.m4 gstreamer-1.2.3/common/m4/introspection.m4 +--- gstreamer-1.2.3.orig/common/m4/introspection.m4 2013-09-24 15:07:33.000000000 +0200 ++++ gstreamer-1.2.3/common/m4/introspection.m4 2016-09-01 10:44:56.426710243 +0200 +@@ -54,14 +54,14 @@ m4_define([_GOBJECT_INTROSPECTION_CHECK_ + INTROSPECTION_GIRDIR= + INTROSPECTION_TYPELIBDIR= + if test "x$found_introspection" = "xyes"; then +- INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` +- INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` +- INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` ++ INTROSPECTION_SCANNER=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` ++ INTROSPECTION_COMPILER=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` ++ INTROSPECTION_GENERATE=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` + INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` + INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" + INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` + INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` +- INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection ++ INTROSPECTION_MAKEFILE=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection + fi + AC_SUBST(INTROSPECTION_SCANNER) + AC_SUBST(INTROSPECTION_COMPILER) diff --git a/common/recipes-multimedia/gstreamer/gst-openmax_git.bb b/common/recipes-multimedia/gstreamer/gst-openmax_git.bb index 3ae3788..3873edd 100644 --- a/common/recipes-multimedia/gstreamer/gst-openmax_git.bb +++ b/common/recipes-multimedia/gstreamer/gst-openmax_git.bb @@ -6,7 +6,7 @@ DEFAULT_PREFERENCE = "-1" DEPENDS = "gstreamer" RDEPENDS_${PN} = "libomxil" LICENSE = "LGPLv2.1" -LICENSE_FLAGS = "commercial" +LICENSE_FLAGS = "commercial" require gst-plugins.inc inherit gettext @@ -21,15 +21,17 @@ EXTRA_OECONF += "--disable-valgrind" # for armadillo800eva SRCREV_armadillo800eva = "43e0be40d82f83308d0a17cd74060b280c30c2a8" -SRC_URI_armadillo800eva = "git://github.com/matsu/gst-openmax.git \ - file://gst-openmax.conf \ +SRC_URI_armadillo800eva = " \ + git://github.com/matsu/gst-openmax.git \ + file://gst-openmax.conf \ " SRCREV = "3dad1ec6803bb2f2627188ce0e957dbeaa57b1be" -SRC_URI = "git://github.com/renesas-devel/gst-openmax.git \ - file://0001-base_videodec-change-the-tile-height-for-T-L-address.patch \ - file://0001-Stop-using-deprecated-GLib-thread-API.patch \ - file://disable_configure.patch \ +SRC_URI = " \ + git://github.com/renesas-devel/gst-openmax.git \ + file://0001-base_videodec-change-the-tile-height-for-T-L-address.patch \ + file://0001-Stop-using-deprecated-GLib-thread-API.patch \ + file://disable_configure.patch \ " S = "${WORKDIR}/git/" @@ -39,12 +41,12 @@ CPPFLAGS += "-Wno-deprecated-declarations" EXTRA_OECONF := "${@'${EXTRA_OECONF}'.replace('--disable-experimental', '--enable-experimental')}" do_configure_prepend() { - (cd ${S}; sh autogen.sh --noconfigure) + (cd ${S}; sh autogen.sh --noconfigure) } do_install_append_armadillo800eva() { - install -d ${D}/home/root/.config/ - install -m 644 ${WORKDIR}/gst-openmax.conf ${D}/home/root/.config/. + install -d ${D}/home/root/.config/ + install -m 644 ${WORKDIR}/gst-openmax.conf ${D}/home/root/.config/. } FILES_${PN} += "${libdir}/gstreamer-${LIBV}/libgstomx.so /home/root/.config" diff --git a/common/recipes-multimedia/gstreamer/gst-plugins-bad_0.10.23.bbappend b/common/recipes-multimedia/gstreamer/gst-plugins-bad_0.10.23.bbappend index 6dd2399..bbe249a 100644 --- a/common/recipes-multimedia/gstreamer/gst-plugins-bad_0.10.23.bbappend +++ b/common/recipes-multimedia/gstreamer/gst-plugins-bad_0.10.23.bbappend @@ -7,20 +7,23 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" # For armadillo SRCREV_armadillo800eva = "6c0a11cb57d4425f6d721a6756c5af4d9dd269e5" -SRC_URI_armadillo800eva = "git://github.com/matsu/gst-plugins-bad.git \ - file://0001-Setup-MERAM-for-A1.patch" +SRC_URI_armadillo800eva = " \ + git://github.com/matsu/gst-plugins-bad.git \ + file://0001-Setup-MERAM-for-A1.patch \ +" + S_armadillo800eva = "${WORKDIR}/git/" DEPENDS_append_armadillo800eva = " directfb libuiomux libshvio" EXTRA_OECONF_armadillo800eva := "${@'${EXTRA_OECONF}'.replace('--disable-directfb', '--enable-directfb')}" EXTRA_OECONF_append_armadillo800eva = " \ - --disable-librfb --enable-introspection=no \ - --disable-nls --disable-static --disable-gsettings \ + --disable-librfb --enable-introspection=no \ + --disable-nls --disable-static --disable-gsettings \ " do_configure_armadillo800eva() { - (cd ${S}; sh autogen.sh --noconfigure) - oe_runconf + (cd ${S}; sh autogen.sh --noconfigure) + oe_runconf } FILES_${PN} += "${bindir}" diff --git a/common/recipes-multimedia/gstreamer/gst-plugins-good_0.10.31.bbappend b/common/recipes-multimedia/gstreamer/gst-plugins-good_0.10.31.bbappend index a055a97..fb3a345 100644 --- a/common/recipes-multimedia/gstreamer/gst-plugins-good_0.10.31.bbappend +++ b/common/recipes-multimedia/gstreamer/gst-plugins-good_0.10.31.bbappend @@ -33,5 +33,6 @@ SRC_URI_append_armadillo800eva = " \ file://0029-videocrop-round-down-cropping-parameters-when-the-co.patch \ file://0030-videocrop-hold-a-lock-to-prevent-from-accessing-crop.patch \ file://0031-videocrop-fix-a-memory-leak-caused-by-invoking-gst_p.patch \ - " +" + require gst-plugins-private-libs.inc diff --git a/common/recipes-multimedia/gstreamer/gst-plugins-package.inc b/common/recipes-multimedia/gstreamer/gst-plugins-package.inc index 7ae3ef6..cb1be06 100644 --- a/common/recipes-multimedia/gstreamer/gst-plugins-package.inc +++ b/common/recipes-multimedia/gstreamer/gst-plugins-package.inc @@ -1,31 +1,46 @@ -LIBV = "0.10" +PACKAGESPLITFUNCS_prepend = " split_gstreamer10_packages " +PACKAGESPLITFUNCS_append = " set_metapkg_rdepends " -python populate_packages_prepend () { +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=d.expand('${PN}')) + 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 + '-locale', pn + '-dev', pn + '-dbg', pn + '-doc' ] + 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'): - metapkg_rdepends.append(pkg) + # 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') } -# metapkg has runtime dependency on PN -# each plugin depends on PN, plugin-dev on PN-dev and plugin-staticdev on PN-staticdev +# 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" @@ -34,7 +49,10 @@ ALLOW_EMPTY_${PN}-staticdev = "1" PACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib" FILES_${PN}-apps = "${bindir}" -FILES_${PN} = "${datadir}/gstreamer-${LIBV}" +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/common/recipes-multimedia/gstreamer/gst-plugins.inc b/common/recipes-multimedia/gstreamer/gst-plugins.inc index fc9567a..959c04e 100644 --- a/common/recipes-multimedia/gstreamer/gst-plugins.inc +++ b/common/recipes-multimedia/gstreamer/gst-plugins.inc @@ -20,10 +20,10 @@ require gst-plugins-package.inc 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 +# ${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 -} +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 +} diff --git a/common/recipes-multimedia/gstreamer/gstreamer/printf.patch b/common/recipes-multimedia/gstreamer/gstreamer/printf.patch new file mode 100644 index 0000000..287994b --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer/printf.patch @@ -0,0 +1,58 @@ +diff --git a/gst/gstinfo.c b/gst/gstinfo.c +index e05cd22..eadb5e0 100644 +--- a/gst/gstinfo.c ++++ b/gst/gstinfo.c +@@ -219,7 +219,7 @@ dladdr (void *address, Dl_info * dl) + static void gst_debug_reset_threshold (gpointer category, gpointer unused); + static void gst_debug_reset_all_thresholds (void); + +-#ifdef HAVE_PRINTF_EXTENSION ++#ifdef GST_USING_PRINTF_EXTENSION + static int _gst_info_printf_extension_ptr (FILE * stream, + const struct printf_info *info, const void *const *args); + static int _gst_info_printf_extension_segment (FILE * stream, +@@ -331,7 +331,7 @@ _priv_gst_debug_init (void) + /* get time we started for debugging messages */ + _priv_gst_info_start_time = gst_util_get_timestamp (); + +-#ifdef HAVE_PRINTF_EXTENSION ++#ifdef GST_USING_PRINTF_EXTENSION + #ifdef HAVE_REGISTER_PRINTF_SPECIFIER + register_printf_specifier (GST_PTR_FORMAT[0], _gst_info_printf_extension_ptr, + _gst_info_printf_extension_arginfo); +@@ -720,7 +720,7 @@ gst_debug_print_object (gpointer ptr) + return g_strdup_printf ("%p", ptr); + } + +-#ifdef HAVE_PRINTF_EXTENSION ++#ifdef GST_USING_PRINTF_EXTENSION + + static gchar * + gst_debug_print_segment (gpointer ptr) +@@ -763,7 +763,7 @@ gst_debug_print_segment (gpointer ptr) + } + } + +-#endif /* HAVE_PRINTF_EXTENSION */ ++#endif /* GST_USING_PRINTF_EXTENSION */ + + /** + * gst_debug_construct_term_color: +@@ -1655,7 +1655,7 @@ _gst_debug_register_funcptr (GstDebugFuncPtr func, const gchar * ptrname) + + /*** PRINTF EXTENSIONS ********************************************************/ + +-#ifdef HAVE_PRINTF_EXTENSION ++#ifdef GST_USING_PRINTF_EXTENSION + static int + _gst_info_printf_extension_ptr (FILE * stream, const struct printf_info *info, + const void *const *args) +@@ -1712,7 +1712,7 @@ _gst_info_printf_extension_arginfo (const struct printf_info *info, size_t n, + } + return 1; + } +-#endif /* HAVE_PRINTF_EXTENSION */ ++#endif /* GST_USING_PRINTF_EXTENSION */ + + static void + gst_info_dump_mem_line (gchar * linebuf, gsize linebuf_size,
\ No newline at end of file diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav.inc new file mode 100644 index 0000000..84e6e95 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-Disable-yasm-for-libav-when-disable-yasm.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/0001-Disable-yasm-for-libav-when-disable-yasm.patch new file mode 100644 index 0000000..1d99ad1 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/workaround-to-build-gst-libav-for-i586-with-gcc.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav/workaround-to-build-gst-libav-for-i586-with-gcc.patch new file mode 100644 index 0000000..ccadea4 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.3.bb new file mode 100644 index 0000000..ecd9819 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.2.3.bb @@ -0,0 +1,26 @@ +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 = " \ + http://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz \ + file://0001-Disable-yasm-for-libav-when-disable-yasm.patch \ + " +SRC_URI[md5sum] = "58c7998a054d8d8ca041fa35738f72b6" +SRC_URI[sha256sum] = "ebc7fbe10955f40df6ccc4bf689075e7e296205fc7ecd8ff383d43c5cdf5bcd6" +LIBAV_EXTRA_CONFIGURE_COMMON_ARG = "--target-os=linux \ + --cc='${CC}' --as='${CC}' --ld='${CC}' --nm='${NM}' --ar='${AR}' \ + --ranlib='${RANLIB}' \ + ${GSTREAMER_1_0_DEBUG}" + +S = "${WORKDIR}/gst-libav-${PV}" + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc new file mode 100644 index 0000000..26c1336 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx.inc @@ -0,0 +1,41 @@ +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']: + # 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") + 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/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omx-fixed-type-error-in-printf-call.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omx-fixed-type-error-in-printf-call.patch new file mode 100644 index 0000000..a428ac9 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omxvideodec-don-t-disable-output-port-but-allocate-o.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omxvideodec-don-t-disable-output-port-but-allocate-o.patch new file mode 100644 index 0000000..b24dbeb --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-omxvideodec-don-t-disable-output-port-but-allocate-o.patch @@ -0,0 +1,36 @@ +From ca11a82ecfed260dfde19dfec5d9f27e0c5b4be5 Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Wed, 5 Jun 2013 16:54:33 +0900 +Subject: [PATCH 01/14] omxvideodec: don't disable output port but allocate + output buffers when changing to idle + +According to the OpenMax specification, buffers for the component to +use for all of the ports must be required to be allocated when +changing to idle state. The input/output ports can't be disabled +at this time. +--- + omx/gstomxvideodec.c | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c +index 976f58e..7f6a48e 100644 +--- a/omx/gstomxvideodec.c ++++ b/omx/gstomxvideodec.c +@@ -2097,13 +2097,7 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder, + /* Need to allocate buffers to reach Idle state */ + if (gst_omx_port_allocate_buffers (self->dec_in_port) != OMX_ErrorNone) + return FALSE; +- +- /* And disable output port */ +- if (gst_omx_port_set_enabled (self->dec_out_port, FALSE) != OMX_ErrorNone) +- return FALSE; +- +- if (gst_omx_port_wait_enabled (self->dec_out_port, +- 1 * GST_SECOND) != OMX_ErrorNone) ++ if (gst_omx_port_allocate_buffers (self->dec_out_port) != OMX_ErrorNone) + return FALSE; + + if (gst_omx_component_get_state (self->dec, +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-omxvideodec-populate-output-buffers-in-the-component.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-omxvideodec-populate-output-buffers-in-the-component.patch new file mode 100644 index 0000000..4e1d59f --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0002-omxvideodec-populate-output-buffers-in-the-component.patch @@ -0,0 +1,29 @@ +From fc7d4dec94367fcd9a3757667a10715897276c22 Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Wed, 5 Jun 2013 17:28:47 +0900 +Subject: [PATCH 02/14] omxvideodec: populate output buffers in the component + +All of the output buffers must be populated in the component with +FillThisBuffer() beforehand so that gst_omx_video_dec_loop() waits +for output buffers to be obtained properly. +--- + omx/gstomxvideodec.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c +index 7f6a48e..73f677b 100644 +--- a/omx/gstomxvideodec.c ++++ b/omx/gstomxvideodec.c +@@ -2111,6 +2111,9 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder, + if (gst_omx_component_get_state (self->dec, + GST_CLOCK_TIME_NONE) != OMX_StateExecuting) + return FALSE; ++ ++ if (gst_omx_port_populate (self->dec_out_port) != OMX_ErrorNone) ++ return FALSE; + } + + /* Unset flushing to allow ports to accept data again */ +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-omxvideodec-update-the-cached-data-of-output-port-de.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-omxvideodec-update-the-cached-data-of-output-port-de.patch new file mode 100644 index 0000000..f8dc325 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-omxvideodec-update-the-cached-data-of-output-port-de.patch @@ -0,0 +1,27 @@ +From 881373684539709a23f842cdfd8cbc1dbef76673 Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Wed, 5 Jun 2013 17:52:18 +0900 +Subject: [PATCH 03/14] omxvideodec: update the cached data of output port + definition after its changes + +This change reflects the change by negotiating caps with downstream. +--- + omx/gstomxvideodec.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c +index 73f677b..df6362b 100644 +--- a/omx/gstomxvideodec.c ++++ b/omx/gstomxvideodec.c +@@ -1443,6 +1443,8 @@ gst_omx_video_dec_loop (GstOMXVideoDec * self) + + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + ++ gst_omx_port_update_port_definition (self->dec_out_port, NULL); ++ + if (acq_return == GST_OMX_ACQUIRE_BUFFER_RECONFIGURE) { + err = gst_omx_video_dec_allocate_output_buffers (self); + if (err != OMX_ErrorNone) +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-omxvideodec-change-supported-color-formats-list-crea.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-omxvideodec-change-supported-color-formats-list-crea.patch new file mode 100644 index 0000000..1f20871 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0004-omxvideodec-change-supported-color-formats-list-crea.patch @@ -0,0 +1,126 @@ +From 92bf075e1ce4b2687acc84f56ffbfff17883069e Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Thu, 6 Jun 2013 11:31:27 +0900 +Subject: [PATCH 04/14] omxvideodec: change supported color formats list + creation + +To create supported color formats list for caps negotiation, +this change tries to set each color format that is prepared in +a list beforehand and determines which color formats are supported +by the component. The more components can be dealt with by this +support. + +NV12 color format is put at the top of the list declared as a constant +so that the caps negotiation gives top priority to this color format. +--- + omx/gstomxvideodec.c | 84 +++++++++++++++++++++++----------------------------- + 1 file changed, 37 insertions(+), 47 deletions(-) + +diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c +index df6362b..62ee5c5 100644 +--- a/omx/gstomxvideodec.c ++++ b/omx/gstomxvideodec.c +@@ -1793,63 +1793,53 @@ static GList * + gst_omx_video_dec_get_supported_colorformats (GstOMXVideoDec * self) + { + GstOMXPort *port = self->dec_out_port; +- GstVideoCodecState *state = self->input_state; + OMX_VIDEO_PARAM_PORTFORMATTYPE param; + OMX_ERRORTYPE err; + GList *negotiation_map = NULL; +- gint old_index; ++ gint i; ++ OMX_COLOR_FORMATTYPE format_org; ++ VideoNegotiationMap *m; ++ const VideoNegotiationMap format_list[] = { ++ {GST_VIDEO_FORMAT_NV12, OMX_COLOR_FormatYUV420SemiPlanar}, ++ {GST_VIDEO_FORMAT_I420, OMX_COLOR_FormatYUV420Planar}, ++ {GST_VIDEO_FORMAT_I420, OMX_COLOR_FormatYUV420PackedPlanar}, ++ }; + + GST_OMX_INIT_STRUCT (¶m); + param.nPortIndex = port->index; +- param.nIndex = 0; +- if (!state || state->info.fps_n == 0) +- param.xFramerate = 0; +- else +- param.xFramerate = (state->info.fps_n << 16) / (state->info.fps_d); + +- old_index = -1; +- do { +- VideoNegotiationMap *m; ++ err = gst_omx_component_get_parameter (self->dec, ++ OMX_IndexParamVideoPortFormat, ¶m); ++ if (err != OMX_ErrorNone) { ++ GST_ERROR_OBJECT (self, ++ "Failed to getting video port format (err info: %s (0x%08x))", ++ gst_omx_error_to_string (err), err); ++ return NULL; ++ } ++ /* temporary save original format type */ ++ format_org = param.eColorFormat; + +- err = +- gst_omx_component_get_parameter (self->dec, ++ for (i = 0; i < sizeof (format_list) / sizeof (VideoNegotiationMap); i++) { ++ param.eColorFormat = format_list[i].type; ++ err = gst_omx_component_set_parameter (self->dec, + OMX_IndexParamVideoPortFormat, ¶m); +- +- /* FIXME: Workaround for Bellagio that simply always +- * returns the same value regardless of nIndex and +- * never returns OMX_ErrorNoMore +- */ +- if (old_index == param.nIndex) +- break; +- +- if (err == OMX_ErrorNone || err == OMX_ErrorNoMore) { +- switch (param.eColorFormat) { +- case OMX_COLOR_FormatYUV420Planar: +- case OMX_COLOR_FormatYUV420PackedPlanar: +- m = g_slice_new (VideoNegotiationMap); +- m->format = GST_VIDEO_FORMAT_I420; +- m->type = param.eColorFormat; +- negotiation_map = g_list_append (negotiation_map, m); +- GST_DEBUG_OBJECT (self, "Component supports I420 (%d) at index %d", +- param.eColorFormat, param.nIndex); +- break; +- case OMX_COLOR_FormatYUV420SemiPlanar: +- m = g_slice_new (VideoNegotiationMap); +- m->format = GST_VIDEO_FORMAT_NV12; +- m->type = param.eColorFormat; +- negotiation_map = g_list_append (negotiation_map, m); +- GST_DEBUG_OBJECT (self, "Component supports NV12 (%d) at index %d", +- param.eColorFormat, param.nIndex); +- break; +- default: +- GST_DEBUG_OBJECT (self, +- "Component supports unsupported color format %d at index %d", +- param.eColorFormat, param.nIndex); +- break; +- } ++ if (err == OMX_ErrorNone) { ++ m = g_slice_new (VideoNegotiationMap); ++ m->format = format_list[i].format; ++ m->type = format_list[i].type; ++ negotiation_map = g_list_append (negotiation_map, m); ++ GST_DEBUG_OBJECT (self, "Component supports (%d)", param.eColorFormat); + } +- old_index = param.nIndex++; +- } while (err == OMX_ErrorNone); ++ } ++ ++ /* restore setting */ ++ param.eColorFormat = format_org; ++ err = gst_omx_component_set_parameter (self->dec, ++ OMX_IndexParamVideoPortFormat, ¶m); ++ if (err != OMX_ErrorNone) ++ GST_ERROR_OBJECT (self, ++ "Failed to seetting video port format (err info: %s (0x%08x))", ++ gst_omx_error_to_string (err), err); + + return negotiation_map; + } +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omxh264dec-allow-to-accept-H.264-stream-in-a-nal-uni.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omxh264dec-allow-to-accept-H.264-stream-in-a-nal-uni.patch new file mode 100644 index 0000000..0ca832d --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0005-omxh264dec-allow-to-accept-H.264-stream-in-a-nal-uni.patch @@ -0,0 +1,27 @@ +From 5c13ed4eeeb151b5bc648eb6f7262f65903470c4 Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Fri, 7 Jun 2013 14:07:57 +0900 +Subject: [PATCH 05/14] omxh264dec: allow to accept H.264 stream in a nal unit + +This change allows to set caps to "alignment=nal" in order to +receive H.264 stream that is split into a nal unit. +--- + omx/gstomxh264dec.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/omx/gstomxh264dec.c b/omx/gstomxh264dec.c +index 2581889..3ed41fc 100644 +--- a/omx/gstomxh264dec.c ++++ b/omx/gstomxh264dec.c +@@ -61,7 +61,7 @@ gst_omx_h264_dec_class_init (GstOMXH264DecClass * klass) + + videodec_class->cdata.default_sink_template_caps = "video/x-h264, " + "parsed=(boolean) true, " +- "alignment=(string) au, " ++ "alignment=(string) { au, nal }, " + "stream-format=(string) byte-stream, " + "width=(int) [1,MAX], " "height=(int) [1,MAX]"; + +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omxvideodec-set-OMX-buffer-flags-if-GST_BUFFER_FLAG_.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omxvideodec-set-OMX-buffer-flags-if-GST_BUFFER_FLAG_.patch new file mode 100644 index 0000000..297ec78 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0006-omxvideodec-set-OMX-buffer-flags-if-GST_BUFFER_FLAG_.patch @@ -0,0 +1,29 @@ +From 8c999df451f8e4307b71d83177f904d1c2ebd346 Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Fri, 7 Jun 2013 15:59:21 +0900 +Subject: [PATCH 06/14] omxvideodec: set OMX buffer flags if + GST_BUFFER_FLAG_HEADER is detected + +OMX for R-CarM1A requires that the OMX_BUFFERFLAG_CODECCONFIG flag +be set if the Nal unit type is SPS or PPS. +--- + omx/gstomxvideodec.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c +index 62ee5c5..1bdac85 100644 +--- a/omx/gstomxvideodec.c ++++ b/omx/gstomxvideodec.c +@@ -2383,6 +2383,9 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder, + if (offset == size) + buf->omx_buf->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME; + ++ if (GST_BUFFER_FLAG_IS_SET (frame->input_buffer, GST_BUFFER_FLAG_HEADER)) ++ buf->omx_buf->nFlags |= OMX_BUFFERFLAG_CODECCONFIG; ++ + self->started = TRUE; + err = gst_omx_port_release_buffer (port, buf); + if (err != OMX_ErrorNone) +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-omxvideodec-remove-the-data-packets-left-queued-in-t.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-omxvideodec-remove-the-data-packets-left-queued-in-t.patch new file mode 100644 index 0000000..15d2478 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0007-omxvideodec-remove-the-data-packets-left-queued-in-t.patch @@ -0,0 +1,63 @@ +From 53072a001ad615377144a1e9ed38f4664496fc8c Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Thu, 13 Jun 2013 12:08:04 +0900 +Subject: [PATCH 07/14] omxvideodec: remove the data packets left queued in the + VideoDecoder class + +This change is required when the data packets split from a frame +are queued in VideoDecoder class. The VideoDecoder class only takes account +into frame to frame decoding, so subsequent packets aren't cleared +from the queue in the VideoDecoder class. +These should be removed before the test to determine if the remaining +data in the queue is needed to be dropped. +--- + omx/gstomxvideodec.c | 33 +++++++++++++++++++++++++++++++++ + 1 file changed, 33 insertions(+) + +diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c +index 1bdac85..e8c276b 100644 +--- a/omx/gstomxvideodec.c ++++ b/omx/gstomxvideodec.c +@@ -949,6 +949,39 @@ _find_nearest_frame (GstOMXVideoDec * self, GstOMXBuffer * buf) + } + + if (best_id) { ++ /* This processing is required when the data packets split from a frame ++ * are queued in VideoDecoder class. The VideoDecoder class takes account ++ * into frame to frame decoding, so the subsequent packets are left queued. ++ * These should be removed before the test to determine if the remaining ++ * data in the queue is needed to be dropped. ++ */ ++ for (l = frames; l; l = l->next) { ++ GstVideoCodecFrame *tmp; ++ BufferIdentification *id; ++ ++ tmp = l->data; ++ id = gst_video_codec_frame_get_user_data (tmp); ++ ++ /* This happens for frames that were just added but ++ * which were not passed to the component yet. Ignore ++ * them here! ++ */ ++ if (!id) ++ continue; ++ ++ if (id->timestamp == best_timestamp && l != best_l) { ++ GstVideoCodecFrame *removal; ++ ++ removal = gst_video_decoder_get_frame (GST_VIDEO_DECODER (self), ++ tmp->system_frame_number); ++ gst_video_decoder_release_frame (GST_VIDEO_DECODER (self), removal); ++ } ++ } ++ ++ g_list_foreach (frames, (GFunc) gst_video_codec_frame_unref, NULL); ++ g_list_free (frames); ++ frames = gst_video_decoder_get_frames (GST_VIDEO_DECODER (self)); ++ + for (l = frames; l && l != best_l; l = l->next) { + GstVideoCodecFrame *tmp = l->data; + BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp); +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-omxwmvdec-support-VC-1-stream-decoding.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-omxwmvdec-support-VC-1-stream-decoding.patch new file mode 100644 index 0000000..f68c421 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0008-omxwmvdec-support-VC-1-stream-decoding.patch @@ -0,0 +1,97 @@ +From b5605b7ce31c43bc29d15507389d980d09eb914a Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Mon, 17 Jun 2013 17:41:05 +0900 +Subject: [PATCH 08/14] omxwmvdec: support VC-1 stream decoding + +The input sequence header must be sent to the REL OMX component before +pushing the frame data according to the spec. +This patch sets codec_data to the the sequence header first, +then the processing keeps being passed with doing nothing. + +Only the Simple/Main profiles are supported by this patch. +Advanced profile isn't supported yet. +--- + omx/gstomxwmvdec.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +diff --git a/omx/gstomxwmvdec.c b/omx/gstomxwmvdec.c +index 64460d9..0f8f2db 100644 +--- a/omx/gstomxwmvdec.c ++++ b/omx/gstomxwmvdec.c +@@ -34,12 +34,16 @@ static gboolean gst_omx_wmv_dec_is_format_change (GstOMXVideoDec * dec, + GstOMXPort * port, GstVideoCodecState * state); + static gboolean gst_omx_wmv_dec_set_format (GstOMXVideoDec * dec, + GstOMXPort * port, GstVideoCodecState * state); ++static GstFlowReturn gst_omx_wmv_dec_prepare_frame (GstOMXVideoDec * self, ++ GstVideoCodecFrame * frame); + + enum + { + PROP_0 + }; + ++#define SEQ_PARAM_BUF_SIZE 24 ++ + /* class initialization */ + + #define DEBUG_INIT \ +@@ -58,6 +62,8 @@ gst_omx_wmv_dec_class_init (GstOMXWMVDecClass * klass) + videodec_class->is_format_change = + GST_DEBUG_FUNCPTR (gst_omx_wmv_dec_is_format_change); + videodec_class->set_format = GST_DEBUG_FUNCPTR (gst_omx_wmv_dec_set_format); ++ videodec_class->prepare_frame = ++ GST_DEBUG_FUNCPTR (gst_omx_wmv_dec_prepare_frame); + + videodec_class->cdata.default_sink_template_caps = "video/x-wmv, " + "width=(int) [1,MAX], " "height=(int) [1,MAX]"; +@@ -96,3 +102,47 @@ gst_omx_wmv_dec_set_format (GstOMXVideoDec * dec, GstOMXPort * port, + + return ret; + } ++ ++static GstFlowReturn ++gst_omx_wmv_dec_prepare_frame (GstOMXVideoDec * self, ++ GstVideoCodecFrame * frame) ++{ ++ if (self->codec_data) { ++ OMX_PARAM_PORTDEFINITIONTYPE port_def; ++ guint32 *SeqHdrBuf; ++ guint8 *u8ptr; ++ GstMapInfo info; ++ ++ gst_omx_port_get_port_definition (self->dec_in_port, &port_def); ++ ++ if (!gst_buffer_map (self->codec_data, &info, GST_MAP_READ)) { ++ GST_ERROR_OBJECT (self, "Failed to create a gstbuffer mapping"); ++ return GST_FLOW_ERROR; ++ } ++ ++ SeqHdrBuf = (guint32 *) g_malloc (SEQ_PARAM_BUF_SIZE); ++ if (SeqHdrBuf == NULL) { ++ GST_ERROR_OBJECT (self, "Failed to g_malloc"); ++ return GST_FLOW_ERROR; ++ } ++ ++ /* create sequence header */ ++ SeqHdrBuf[0] = 0xc5000000; ++ SeqHdrBuf[1] = 0x00000004; ++ u8ptr = (guint8 *) & SeqHdrBuf[2]; ++ u8ptr[0] = info.data[0]; ++ u8ptr[1] = info.data[1]; ++ u8ptr[2] = info.data[2]; ++ u8ptr[3] = info.data[3]; ++ SeqHdrBuf[3] = port_def.format.video.nFrameHeight; ++ SeqHdrBuf[4] = port_def.format.video.nFrameWidth; ++ SeqHdrBuf[5] = 0x0000000c; ++ ++ gst_buffer_unmap (self->codec_data, &info); ++ ++ gst_buffer_replace (&self->codec_data, NULL); ++ self->codec_data = gst_buffer_new_wrapped (SeqHdrBuf, SEQ_PARAM_BUF_SIZE); ++ } ++ ++ return GST_FLOW_OK; ++} +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxwmvdec-support-VC-1-advanced-profile.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxwmvdec-support-VC-1-advanced-profile.patch new file mode 100644 index 0000000..3d31b1c --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0009-omxwmvdec-support-VC-1-advanced-profile.patch @@ -0,0 +1,56 @@ +From 5ad42791ad2d93bd694bf5faa466ccaffee7d23b Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Wed, 19 Jun 2013 16:03:02 +0900 +Subject: [PATCH 09/14] omxwmvdec: support VC-1 advanced profile + +If VC-1 advanced profile stream is demuxed, codec_data has a sequence +header and a entry point header. At the beginning of playback, +this patch pushes a buffer which is the concatenation of sequence header, +entry point header and first frame data to decode the advanced profile +stream. +--- + omx/gstomxwmvdec.c | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +diff --git a/omx/gstomxwmvdec.c b/omx/gstomxwmvdec.c +index 0f8f2db..a3bd3c5 100644 +--- a/omx/gstomxwmvdec.c ++++ b/omx/gstomxwmvdec.c +@@ -107,7 +107,33 @@ static GstFlowReturn + gst_omx_wmv_dec_prepare_frame (GstOMXVideoDec * self, + GstVideoCodecFrame * frame) + { +- if (self->codec_data) { ++ GstCaps *caps; ++ gboolean is_ap = FALSE; ++ GstStructure *structure; ++ const gchar *fourcc; ++ ++ if (self->codec_data == NULL) ++ return GST_FLOW_OK; ++ ++ caps = gst_pad_get_current_caps (GST_VIDEO_DECODER_SINK_PAD (self)); ++ structure = gst_caps_get_structure (caps, 0); ++ fourcc = gst_structure_get_string (structure, "format"); ++ if (fourcc) { ++ if (strncmp (fourcc, "WVC1", strlen ("WVC1")) == 0) { ++ GST_INFO_OBJECT (self, "stream type is Advanced Profile"); ++ is_ap = TRUE; ++ } else { ++ GST_INFO_OBJECT (self, "stream type is Simple/Main Profile"); ++ is_ap = FALSE; ++ } ++ } ++ gst_caps_unref (caps); ++ ++ if (is_ap) { ++ frame->input_buffer = ++ gst_buffer_append (self->codec_data, frame->input_buffer); ++ self->codec_data = NULL; ++ } else { + OMX_PARAM_PORTDEFINITIONTYPE port_def; + guint32 *SeqHdrBuf; + guint8 *u8ptr; +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideodec-don-t-start-the-output-thread-before-set.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideodec-don-t-start-the-output-thread-before-set.patch new file mode 100644 index 0000000..d9bb319 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0010-omxvideodec-don-t-start-the-output-thread-before-set.patch @@ -0,0 +1,74 @@ +From 51d51503f9a1bd52e32d08a81b1ab9b2c0996161 Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Tue, 25 Jun 2013 19:23:28 +0900 +Subject: [PATCH 10/14] omxvideodec: don't start the output thread before + set_format has been done + +reset() method is invoked before set_format() has been invoked at +the initialization. Thus the output thread is launched before output +buffers haven't been populated into the component with FillThisBuffer() yet. +This might cause a malfunction of decoding. +To resolve the above issue, the output thread invocation in the +reset() method is restricted before the processing necessary to +activate the component with set_format_done flag. +--- + omx/gstomxvideodec.c | 8 ++++++-- + omx/gstomxvideodec.h | 2 ++ + 2 files changed, 8 insertions(+), 2 deletions(-) + +diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c +index e8c276b..2beaac6 100644 +--- a/omx/gstomxvideodec.c ++++ b/omx/gstomxvideodec.c +@@ -735,6 +735,7 @@ gst_omx_video_dec_open (GstVideoDecoder * decoder) + klass->cdata.component_name, klass->cdata.component_role, + klass->cdata.hacks); + self->started = FALSE; ++ self->set_format_done = FALSE; + + if (!self->dec) + return FALSE; +@@ -819,6 +820,7 @@ gst_omx_video_dec_close (GstVideoDecoder * decoder) + self->dec = NULL; + + self->started = FALSE; ++ self->set_format_done = FALSE; + + GST_DEBUG_OBJECT (self, "Closed decoder"); + +@@ -2158,6 +2160,7 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder, + self->downstream_flow_ret = GST_FLOW_OK; + gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self), + (GstTaskFunction) gst_omx_video_dec_loop, decoder, NULL); ++ self->set_format_done = TRUE; + + return TRUE; + } +@@ -2192,8 +2195,9 @@ gst_omx_video_dec_reset (GstVideoDecoder * decoder, gboolean hard) + self->last_upstream_ts = 0; + self->eos = FALSE; + self->downstream_flow_ret = GST_FLOW_OK; +- gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self), +- (GstTaskFunction) gst_omx_video_dec_loop, decoder, NULL); ++ if (self->set_format_done) ++ gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self), ++ (GstTaskFunction) gst_omx_video_dec_loop, decoder, NULL); + + GST_DEBUG_OBJECT (self, "Reset decoder"); + +diff --git a/omx/gstomxvideodec.h b/omx/gstomxvideodec.h +index 8f0f98b..747bc36 100644 +--- a/omx/gstomxvideodec.h ++++ b/omx/gstomxvideodec.h +@@ -62,6 +62,8 @@ struct _GstOMXVideoDec + * the first buffer */ + gboolean started; + ++ gboolean set_format_done; ++ + GstClockTime last_upstream_ts; + + /* Draining state */ +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omxvideodec-don-t-use-gst_buffer_map-when-copying-to.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omxvideodec-don-t-use-gst_buffer_map-when-copying-to.patch new file mode 100644 index 0000000..e593629 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0011-omxvideodec-don-t-use-gst_buffer_map-when-copying-to.patch @@ -0,0 +1,45 @@ +From 23a56fb86827f4555e30fa587df32fb00f709877 Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Thu, 27 Jun 2013 19:07:19 +0900 +Subject: [PATCH 11/14] omxvideodec: don't use gst_buffer_map when copying to + the output buffers + +When the preallocated buffers which are separated into multiple blocks +are received from a sink plugin, gst_buffer_map() could return +the different pointer from the buffers received from the sink plugin. +Probably it is newly allocated because the buffers are mistakenly +regarded as being discontiguous and tried to be collected into a +region with copying. +It is safety that the stride and the slice height are always taken +account into when copying to the output buffers. +--- + omx/gstomxvideodec.c | 13 ------------- + 1 file changed, 13 deletions(-) + +diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c +index 2beaac6..1c3a64c 100644 +--- a/omx/gstomxvideodec.c ++++ b/omx/gstomxvideodec.c +@@ -1048,19 +1048,6 @@ gst_omx_video_dec_fill_buffer (GstOMXVideoDec * self, + goto done; + } + +- /* Same strides and everything */ +- if (gst_buffer_get_size (outbuf) == inbuf->omx_buf->nFilledLen) { +- GstMapInfo map = GST_MAP_INFO_INIT; +- +- gst_buffer_map (outbuf, &map, GST_MAP_WRITE); +- memcpy (map.data, +- inbuf->omx_buf->pBuffer + inbuf->omx_buf->nOffset, +- inbuf->omx_buf->nFilledLen); +- gst_buffer_unmap (outbuf, &map); +- ret = TRUE; +- goto done; +- } +- + /* Different strides */ + + switch (vinfo->finfo->format) { +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch new file mode 100644 index 0000000..743d849 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0012-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch @@ -0,0 +1,36 @@ +From 2319fa55b99d8bc0285f79f2cc322aa6ffdce41f Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Thu, 27 Jun 2013 21:50:31 +0900 +Subject: [PATCH 12/14] gstomx: Once reinitialize an instance and then retry + OMX_Init() if it fails + +Reinitializing an instance in case that OMX_Init() fails may +be effective especially for some stateful OMXIL libraries since it +resets the state. +--- + omx/gstomx.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/omx/gstomx.c b/omx/gstomx.c +index f542954..be4c4dd 100644 +--- a/omx/gstomx.c ++++ b/omx/gstomx.c +@@ -133,9 +133,15 @@ gst_omx_core_acquire (const gchar * filename) + core->user_count++; + if (core->user_count == 1) { + OMX_ERRORTYPE err; ++ int retry = 1; + ++ reinit: + err = core->init (); + if (err != OMX_ErrorNone) { ++ if (retry-- > 0) { ++ core->deinit (); ++ goto reinit; ++ } + GST_ERROR ("Failed to initialize core '%s': 0x%08x", filename, err); + g_mutex_unlock (&core->lock); + goto error; +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomx-fix-a-missing-g_free.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomx-fix-a-missing-g_free.patch new file mode 100644 index 0000000..fa91c71 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0013-gstomx-fix-a-missing-g_free.patch @@ -0,0 +1,24 @@ +From 8ba852a436d22604897526cb3408e51626b7dd5f Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Thu, 27 Jun 2013 21:59:29 +0900 +Subject: [PATCH 13/14] gstomx: fix a missing g_free + +--- + omx/gstomx.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/omx/gstomx.c b/omx/gstomx.c +index be4c4dd..6738d98 100644 +--- a/omx/gstomx.c ++++ b/omx/gstomx.c +@@ -651,6 +651,7 @@ gst_omx_component_new (GstObject * parent, const gchar * core_name, + "Failed to get component handle '%s' from core '%s': 0x%08x", + component_name, core_name, err); + gst_omx_core_release (core); ++ g_free (comp->name); + g_slice_free (GstOMXComponent, comp); + return NULL; + } +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch new file mode 100644 index 0000000..f20d81d --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0014-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch @@ -0,0 +1,39 @@ +From 4a858bb6cf197653aa77f6a3d8b652a793419291 Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Thu, 27 Jun 2013 22:03:37 +0900 +Subject: [PATCH 14/14] gstomx: Once reinitialize an instance and then retry + OMX_Init() if OMX_GetHandle() fails + +Reinitializing an instance in case that OMX_GetHandle() fails may +be effective especially for some stateful OMXIL libraries since it +resets the state. +--- + omx/gstomx.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/omx/gstomx.c b/omx/gstomx.c +index 6738d98..6b0a3d1 100644 +--- a/omx/gstomx.c ++++ b/omx/gstomx.c +@@ -630,7 +630,9 @@ gst_omx_component_new (GstObject * parent, const gchar * core_name, + GstOMXCore *core; + GstOMXComponent *comp; + const gchar *dot; ++ gint retry = 1; + ++reinit: + core = gst_omx_core_acquire (core_name); + if (!core) + return NULL; +@@ -653,6 +655,8 @@ gst_omx_component_new (GstObject * parent, const gchar * core_name, + gst_omx_core_release (core); + g_free (comp->name); + g_slice_free (GstOMXComponent, comp); ++ if (retry-- > 0) ++ goto reinit; + return NULL; + } + GST_DEBUG_OBJECT (parent, +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0015-omxmpeg4videodec-conform-caps-template-to-the-defini.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0015-omxmpeg4videodec-conform-caps-template-to-the-defini.patch new file mode 100644 index 0000000..9dac021 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx/0015-omxmpeg4videodec-conform-caps-template-to-the-defini.patch @@ -0,0 +1,30 @@ +From d2e63c6780b323ae8dc03b0236e7e87c0a8832dc Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Mon, 1 Jul 2013 13:33:07 +0900 +Subject: [PATCH 15/15] omxmpeg4videodec: conform caps template to the + definition described in avidemux + +This is to avoid the caps negotiation failure between avidemux and +omxmpeg4videodec. +--- + omx/gstomxmpeg4videodec.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/omx/gstomxmpeg4videodec.c b/omx/gstomxmpeg4videodec.c +index d912d74..ade12fc 100644 +--- a/omx/gstomxmpeg4videodec.c ++++ b/omx/gstomxmpeg4videodec.c +@@ -62,9 +62,7 @@ gst_omx_mpeg4_video_dec_class_init (GstOMXMPEG4VideoDecClass * klass) + GST_DEBUG_FUNCPTR (gst_omx_mpeg4_video_dec_set_format); + + videodec_class->cdata.default_sink_template_caps = "video/mpeg, " +- "mpegversion=(int) 4, " +- "systemstream=(boolean) false, " +- "parsed=(boolean) true, " "width=(int) [1,MAX], " "height=(int) [1,MAX]"; ++ "mpegversion=(int) 4, " "width=(int) [1,MAX], " "height=(int) [1,MAX]"; + + gst_element_class_set_static_metadata (element_class, + "OpenMAX MPEG4 Video Decoder", +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bb new file mode 100644 index 0000000..40fc2c7 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bb @@ -0,0 +1,13 @@ +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 = "http://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz" + +SRC_URI[md5sum] = "bb34b5742223267298bcffc209104a92" +SRC_URI[sha256sum] = "7a1d8d28d70dacc6bd3c7ee7d7e40df6d5a1d38d7c256d5c9c5c8ef15c005014" + +S = "${WORKDIR}/gst-omx-${PV}" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bbappend new file mode 100644 index 0000000..c0e5605 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.0.0.bbappend @@ -0,0 +1,21 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI += " \ + file://0001-omxvideodec-don-t-disable-output-port-but-allocate-o.patch \ + file://0002-omxvideodec-populate-output-buffers-in-the-component.patch \ + file://0003-omxvideodec-update-the-cached-data-of-output-port-de.patch \ + file://0004-omxvideodec-change-supported-color-formats-list-crea.patch \ + file://0005-omxh264dec-allow-to-accept-H.264-stream-in-a-nal-uni.patch \ + file://0006-omxvideodec-set-OMX-buffer-flags-if-GST_BUFFER_FLAG_.patch \ + file://0007-omxvideodec-remove-the-data-packets-left-queued-in-t.patch \ + file://0008-omxwmvdec-support-VC-1-stream-decoding.patch \ + file://0009-omxwmvdec-support-VC-1-advanced-profile.patch \ + file://0010-omxvideodec-don-t-start-the-output-thread-before-set.patch \ + file://0011-omxvideodec-don-t-use-gst_buffer_map-when-copying-to.patch \ + file://0012-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch \ + file://0013-gstomx-fix-a-missing-g_free.patch \ + file://0014-gstomx-Once-reinitialize-an-instance-and-then-retry-.patch \ + file://0015-omxmpeg4videodec-conform-caps-template-to-the-defini.patch \ + " + +EXTRA_OECONF += "--enable-experimental" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc new file mode 100644 index 0000000..b4f01af --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad.inc @@ -0,0 +1,136 @@ +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 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 libgudev" +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" +PACKAGECONFIG[voamrwbenc] = "--enable-voamrwbenc,--disable-voamrwbenc,vo-amrwbenc" +PACKAGECONFIG[voaacenc] = "--enable-voaacenc,--disable-voaacenc,vo-aacenc" +PACKAGECONFIG[resindvd] = "--enable-resindvd,--disable-resindvd,libdvdnav libdvdread" + +# 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 rtmp soundtouch spandsp spc +# srtp vdpau 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-sdl \ + --disable-sdltest \ + --disable-sndio \ + --disable-soundtouch \ + --disable-spandsp \ + --disable-spc \ + --disable-srtp \ + --disable-teletextdec \ + --disable-timidity \ + --disable-vcd \ + --disable-vdpau \ + --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*" + +FILES_${PN}-voamrwbenc += "${datadir}/gstreamer-${LIBV}/presets/GstVoAmrwbEnc.prs" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch new file mode 100644 index 0000000..94e5a4d --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch @@ -0,0 +1,105 @@ +From b47725b30127df2f34d5a4612a7021adb110e1bc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= <jsmoeller@linuxfoundation.org> +Date: Thu, 1 Sep 2016 22:06:11 +0200 +Subject: [PATCH] Patch Makefiles to use PKG_CONFIG_SYSROOT_PATH + +--- + gst-libs/gst/egl/Makefile.am | 10 +++++----- + gst-libs/gst/insertbin/Makefile.am | 10 +++++----- + gst-libs/gst/mpegts/Makefile.am | 10 +++++----- + 3 files changed, 15 insertions(+), 15 deletions(-) + +diff --git a/gst-libs/gst/egl/Makefile.am b/gst-libs/gst/egl/Makefile.am +index 2270d26..e1a80fa 100644 +--- a/gst-libs/gst/egl/Makefile.am ++++ b/gst-libs/gst/egl/Makefile.am +@@ -43,11 +43,11 @@ GstEGL-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstegl-@GST_API_VERSIO + --c-include "gst/egl/egl.h" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \ + --library=libgstegl-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-video-@GST_API_VERSION@ \ + --pkg-export gstreamer-egl-@GST_API_VERSION@ \ +@@ -71,8 +71,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/insertbin/Makefile.am b/gst-libs/gst/insertbin/Makefile.am +index 6379a0b..ddfadf8 100644 +--- a/gst-libs/gst/insertbin/Makefile.am ++++ b/gst-libs/gst/insertbin/Makefile.am +@@ -38,12 +38,12 @@ GstInsertBin-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstinsertbin-@GS + --c-include "gst/insertbin/gstinsertbin.h" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + --library=libgstinsertbin-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ + --include=GstBase-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-base-@GST_API_VERSION@ \ + --pkg-export gstreamer-insertbin-@GST_API_VERSION@ \ +@@ -67,8 +67,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/mpegts/Makefile.am b/gst-libs/gst/mpegts/Makefile.am +index 649de69..bfc164f 100644 +--- a/gst-libs/gst/mpegts/Makefile.am ++++ b/gst-libs/gst/mpegts/Makefile.am +@@ -71,11 +71,11 @@ GstMpegts-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstmpegts-@GST_API_ + --c-include "gst/mpegts/mpegts.h" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-video-@GST_API_VERSION@` \ + --library=libgstmpegts-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-video-@GST_API_VERSION@ \ + --pkg-export gstreamer-mpegts-@GST_API_VERSION@ \ +@@ -99,8 +99,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) +-- +2.1.4 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-gl-do-not-check-for-GL-GLU-EGL-GLES2-libs-if-disable.patch b/common/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 0000000..042a32c --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-glimagesink-Downrank-to-marginal.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-glimagesink-Downrank-to-marginal.patch new file mode 100644 index 0000000..f677603 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-glimagesink-Downrank-to-marginal.patch @@ -0,0 +1,32 @@ +From c6b37a80806f9128de47f1ccc3f2354f8d436bb6 Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin <alex.kanavin@gmail.com> +Date: Thu, 24 Sep 2015 19:47:32 +0300 +Subject: [PATCH] glimagesink: Downrank to marginal + +On desktop, where there is good OpenGL, xvimagesink will come up first, +on other platforms, OpenGL can't be trusted because it's either software (like +in a VM) or broken (like on embedded)., so let ximagesink come above. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=751684] + +Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> +--- + ext/gl/gstopengl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/gl/gstopengl.c b/ext/gl/gstopengl.c +index a4b2540..0ccaacd 100644 +--- a/ext/gl/gstopengl.c ++++ b/ext/gl/gstopengl.c +@@ -101,7 +101,7 @@ plugin_init (GstPlugin * plugin) + #endif + + if (!gst_element_register (plugin, "glimagesink", +- GST_RANK_SECONDARY, GST_TYPE_GLIMAGE_SINK)) { ++ GST_RANK_MARGINAL, GST_TYPE_GLIMAGE_SINK)) { + return FALSE; + } + +-- +2.1.4 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/configure-allow-to-disable-libssh2.patch new file mode 100644 index 0000000..d52afd5 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend new file mode 100644 index 0000000..e22e3f8 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend @@ -0,0 +1,2 @@ +PACKAGECONFIG[bluez] = "--enable-bluez,--disable-bluez,bluez5" + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bb new file mode 100644 index 0000000..009db30 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bb @@ -0,0 +1,14 @@ +DEFAULT_PREFERENCE = "-1" + +include gstreamer1.0-plugins-bad.inc + +#remove patch from poky that is not necessary in version 1.2.3 +SRC_URI_remove = "file://configure-allow-to-disable-libssh2.patch" + +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[md5sum] = "cfd6f303c8df2740b27cc63b945decef" +SRC_URI[sha256sum] = "595d7911a9e6207dea37200587724bdbf841b81a5eb0730118be36976684278c" +S = "${WORKDIR}/gst-plugins-bad-${PV}" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend index 4b37238..b7cb577 100644 --- a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.2.3.bbappend @@ -1,7 +1,5 @@ DEPENDS += "faad2 libxml2 libuiomux libshvio" -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" - TARGET_CFLAGS += "-D_GNU_SOURCE" PACKAGECONFIG := "${@'${PACKAGECONFIG}'.replace('curl', '')}" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc new file mode 100644 index 0000000..4909b10 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base.inc @@ -0,0 +1,38 @@ +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" +# libvisual do not seem to exist anywhere in OE +PACKAGECONFIG[visual] = "--enable-libvisual,--disable-libvisual,libvisual" +PACKAGECONFIG[cdparanoia] = "--enable-cdparanoia,--disable-cdparanoia,cdparanoia" + +EXTRA_OECONF += " \ + --disable-freetypetest \ +" + +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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch new file mode 100644 index 0000000..49b6ebc --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch @@ -0,0 +1,359 @@ +From 1a363164d7804895b6df43aa9cb5833134bd3c1d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jan-Simon=20M=C3=B6ller?= <jsmoeller@linuxfoundation.org> +Date: Thu, 1 Sep 2016 20:07:43 +0200 +Subject: [PATCH] Patch Makefiles to use PKG_CONFIG_SYSROOT_PATH + +--- + gst-libs/gst/allocators/Makefile.am | 6 +++--- + gst-libs/gst/app/Makefile.am | 6 +++--- + gst-libs/gst/audio/Makefile.am | 14 +++++++------- + gst-libs/gst/fft/Makefile.am | 6 +++--- + gst-libs/gst/pbutils/Makefile.am | 14 +++++++------- + gst-libs/gst/riff/Makefile.am | 12 +++++++----- + gst-libs/gst/rtp/Makefile.am | 10 +++++----- + gst-libs/gst/rtsp/Makefile.am | 7 +++---- + gst-libs/gst/sdp/Makefile.am | 6 +++--- + gst-libs/gst/tag/Makefile.am | 10 +++++----- + gst-libs/gst/video/Makefile.am | 10 +++++----- + 11 files changed, 51 insertions(+), 50 deletions(-) + +diff --git a/gst-libs/gst/allocators/Makefile.am b/gst-libs/gst/allocators/Makefile.am +index c550ab0..24825d9 100644 +--- a/gst-libs/gst/allocators/Makefile.am ++++ b/gst-libs/gst/allocators/Makefile.am +@@ -32,10 +32,10 @@ GstAllocators-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstallocators-@ + --c-include "gst/allocators/allocators.h" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + --library=libgstallocators-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg-export gstreamer-allocators-@GST_API_VERSION@ \ + --output $@ \ +@@ -56,7 +56,7 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/app/Makefile.am b/gst-libs/gst/app/Makefile.am +index e89057a..91b2f0e 100644 +--- a/gst-libs/gst/app/Makefile.am ++++ b/gst-libs/gst/app/Makefile.am +@@ -47,12 +47,12 @@ GstApp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstapp-@GST_API_VERSIO + --c-include "gst/app/app.h" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + --library=libgstapp-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ + --include=GstBase-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-base-@GST_API_VERSION@ \ + --pkg-export gstreamer-app-@GST_API_VERSION@ \ +diff --git a/gst-libs/gst/audio/Makefile.am b/gst-libs/gst/audio/Makefile.am +index 0e67b9b..ac43b19 100644 +--- a/gst-libs/gst/audio/Makefile.am ++++ b/gst-libs/gst/audio/Makefile.am +@@ -93,17 +93,17 @@ GstAudio-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstaudio-@GST_API_VE + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ + --c-include "gst/audio/audio.h" \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + --add-include-path="$(top_builddir)/gst-libs/gst/tag/" \ + --library=libgstaudio-@GST_API_VERSION@.la \ +- --library-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-@GST_API_VERSION@` \ +- --library-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-base-@GST_API_VERSION@` \ ++ --library-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-@GST_API_VERSION@` \ ++ --library-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-base-@GST_API_VERSION@` \ + --library-path="$(top_builddir)/gst-libs/gst/tag/" \ + --include=Gst-@GST_API_VERSION@ \ + --include=GstBase-@GST_API_VERSION@ \ + --include=GstTag-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-base-@GST_API_VERSION@ \ + --pkg-export gstreamer-audio-@GST_API_VERSION@ \ +@@ -127,8 +127,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + --includedir=$(srcdir) \ + --includedir=$(builddir) \ + --includedir="$(top_builddir)/gst-libs/gst/tag/" \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/fft/Makefile.am b/gst-libs/gst/fft/Makefile.am +index 99c71ba..3527352 100644 +--- a/gst-libs/gst/fft/Makefile.am ++++ b/gst-libs/gst/fft/Makefile.am +@@ -61,10 +61,10 @@ GstFft-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstfft-@GST_API_VERSIO + --c-include "gst/fft/fft.h" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + --library=libgstfft-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg-export gstreamer-fft-@GST_API_VERSION@ \ + --output $@ \ +@@ -85,7 +85,7 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/pbutils/Makefile.am b/gst-libs/gst/pbutils/Makefile.am +index c0f0091..54b3103 100644 +--- a/gst-libs/gst/pbutils/Makefile.am ++++ b/gst-libs/gst/pbutils/Makefile.am +@@ -79,14 +79,14 @@ GstPbutils-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_AP + --c-include "gst/pbutils/pbutils.h" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + --add-include-path="$(top_builddir)/gst-libs/gst/tag/" \ + --add-include-path="$(top_builddir)/gst-libs/gst/video/" \ + --add-include-path="$(top_builddir)/gst-libs/gst/audio/" \ + --library=libgstpbutils-@GST_API_VERSION@.la \ +- --library-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-@GST_API_VERSION@` \ +- --library-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-base-@GST_API_VERSION@` \ ++ --library-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-@GST_API_VERSION@` \ ++ --library-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=libdir gstreamer-base-@GST_API_VERSION@` \ + --library-path="$(top_builddir)/gst-libs/gst/tag/" \ + --library-path="$(top_builddir)/gst-libs/gst/video/" \ + --library-path="$(top_builddir)/gst-libs/gst/audio/" \ +@@ -94,7 +94,7 @@ GstPbutils-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstpbutils-@GST_AP + --include=GstTag-@GST_API_VERSION@ \ + --include=GstVideo-@GST_API_VERSION@ \ + --include=GstAudio-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-tag-@GST_API_VERSION@ \ + --pkg gstreamer-video-@GST_API_VERSION@ \ +@@ -119,8 +119,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + --includedir="$(top_builddir)/gst-libs/gst/tag/" \ + --includedir="$(top_builddir)/gst-libs/gst/video/" \ + --includedir="$(top_builddir)/gst-libs/gst/audio/" \ +diff --git a/gst-libs/gst/riff/Makefile.am b/gst-libs/gst/riff/Makefile.am +index 974efd4..9de2a59 100644 +--- a/gst-libs/gst/riff/Makefile.am ++++ b/gst-libs/gst/riff/Makefile.am +@@ -36,13 +36,15 @@ GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERS + --c-include "gst/riff/riff.h" \ + --add-include-path=$(builddir)/../tag \ + --add-include-path=$(builddir)/../audio \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ -I$(top_srcdir)/gst-libs \ ++ -I$(top_builddir)/gst-libs \ + --library=libgstriff-@GST_API_VERSION@.la \ + --include=GstAudio-@GST_API_VERSION@ \ + --include=GstTag-@GST_API_VERSION@ \ + --include=Gst-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-tag-@GST_API_VERSION@ \ + --pkg gstreamer-audio-@GST_API_VERSION@ \ +@@ -68,8 +70,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + --includedir=$(builddir) \ + --includedir=$(builddir)/../tag \ + --includedir=$(builddir)/../audio \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/rtp/Makefile.am b/gst-libs/gst/rtp/Makefile.am +index 15126ff..3c07a6f 100644 +--- a/gst-libs/gst/rtp/Makefile.am ++++ b/gst-libs/gst/rtp/Makefile.am +@@ -39,12 +39,12 @@ GstRtp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtp-@GST_API_VERSIO + --warn-all \ + --c-include "gst/rtp/rtp.h" \ + -I$(top_srcdir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + --library=libgstrtp-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ + --include=GstBase-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-base-@GST_API_VERSION@ \ + --pkg-export gstreamer-rtp-@GST_API_VERSION@ \ +@@ -67,8 +67,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/rtsp/Makefile.am b/gst-libs/gst/rtsp/Makefile.am +index eceafe5..82646da 100644 +--- a/gst-libs/gst/rtsp/Makefile.am ++++ b/gst-libs/gst/rtsp/Makefile.am +@@ -67,15 +67,14 @@ GstRtsp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstrtsp-@GST_API_VERS + -I$(top_builddir)/gst-libs \ + -I$(top_srcdir)/gst-libs \ + --add-include-path=$(builddir)/../sdp \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + --library=libgstrtsp-@GST_API_VERSION@.la \ + --include=Gio-2.0 \ + --include=Gst-@GST_API_VERSION@ \ + --include=GstSdp-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gio-2.0 \ + --pkg gstreamer-@GST_API_VERSION@ \ +- --pkg gstreamer-sdp-@GST_API_VERSION@ \ + --pkg-export gstreamer-rtsp-@GST_API_VERSION@ \ + --add-init-section="gst_init(NULL,NULL);" \ + --output $@ \ +@@ -97,7 +96,7 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + --includedir=$(srcdir) \ + --includedir=$(builddir) \ + --includedir=$(builddir)/../sdp \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/sdp/Makefile.am b/gst-libs/gst/sdp/Makefile.am +index 70fba4b..10384d5 100644 +--- a/gst-libs/gst/sdp/Makefile.am ++++ b/gst-libs/gst/sdp/Makefile.am +@@ -27,10 +27,10 @@ GstSdp-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstsdp-@GST_API_VERSIO + --warn-all \ + --c-include "gst/sdp/sdp.h" \ + -I$(top_srcdir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + --library=libgstsdp-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg-export gstreamer-sdp-@GST_API_VERSION@ \ + --output $@ \ +@@ -51,7 +51,7 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/tag/Makefile.am b/gst-libs/gst/tag/Makefile.am +index 1883636..e7fe84e 100644 +--- a/gst-libs/gst/tag/Makefile.am ++++ b/gst-libs/gst/tag/Makefile.am +@@ -39,12 +39,12 @@ GstTag-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgsttag-@GST_API_VERSIO + --c-include "gst/tag/tag.h" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + --library=libgsttag-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ + --include=GstBase-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-base-@GST_API_VERSION@ \ + --pkg-export gstreamer-tag-@GST_API_VERSION@ \ +@@ -67,8 +67,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +diff --git a/gst-libs/gst/video/Makefile.am b/gst-libs/gst/video/Makefile.am +index 292415e..5878bf1 100644 +--- a/gst-libs/gst/video/Makefile.am ++++ b/gst-libs/gst/video/Makefile.am +@@ -93,12 +93,12 @@ GstVideo-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstvideo-@GST_API_VE + --c-include "gst/video/video.h" \ + -I$(top_srcdir)/gst-libs \ + -I$(top_builddir)/gst-libs \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --add-include-path=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + --library=libgstvideo-@GST_API_VERSION@.la \ + --include=Gst-@GST_API_VERSION@ \ + --include=GstBase-@GST_API_VERSION@ \ +- --libtool="$(top_builddir)/libtool" \ ++ --libtool="$(LIBTOOL)" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-base-@GST_API_VERSION@ \ + --pkg-export gstreamer-video-@GST_API_VERSION@ \ +@@ -121,8 +121,8 @@ typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ +- --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ ++ --includedir=$(PKG_CONFIG_SYSROOT_DIR)`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + + CLEANFILES += $(BUILT_GIRSOURCES) $(typelibs_DATA) +-- +2.1.4 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-basetextoverlay-make-memory-copy-when-video-buffer-s.patch new file mode 100644 index 0000000..03dca95 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-video-frame-Don-t-ref-buffers-twice-when-mapping.patch new file mode 100644 index 0000000..3db4724 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-gstplaysink-don-t-set-async-of-custom-text-sink-to-f.patch b/common/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 0000000..39c146a --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-video-frame-Add-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch new file mode 100644 index 0000000..c465b5c --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-ssaparse-enhance-SSA-text-lines-parsing.patch new file mode 100644 index 0000000..9fbebd5 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-videofilter-Use-new-GST_VIDEO_FRAME_MAP_FLAG_NO_REF.patch new file mode 100644 index 0000000..132bf06 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-subparse-set-need_segment-after-sink-pad-received-GS.patch new file mode 100644 index 0000000..7813915 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event-if.patch new file mode 100644 index 0000000..aa55de1 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event2.patch new file mode 100755 index 0000000..f24bc7c --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/do-not-change-eos-event-to-gap-event3.patch new file mode 100755 index 0000000..731be68 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/encodebin-Need-more-buffers-in-output-queue-for-bett.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/encodebin-Need-more-buffers-in-output-queue-for-bett.patch new file mode 100644 index 0000000..3256717 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/fix-id3demux-utf16-to-utf8-issue.patch new file mode 100755 index 0000000..ef3f75f --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/get-caps-from-src-pad-when-query-caps.patch new file mode 100644 index 0000000..284abbe --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch new file mode 100755 index 0000000..833ce72 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/taglist-not-send-to-down-stream-if-all-the-frame-cor.patch new file mode 100644 index 0000000..62a52b0 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videobuffer_updata_alignment_update.patch new file mode 100755 index 0000000..8cfda95 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/videoencoder-Keep-sticky-events-around-when-doing-a-soft-.patch new file mode 100644 index 0000000..b476969 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bb new file mode 100644 index 0000000..9ee9202 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bb @@ -0,0 +1,11 @@ +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 \ + " +SRC_URI[md5sum] = "17aeabfbcd232526f50c9bee375f1b97" +SRC_URI[sha256sum] = "61edec35c270f86928bad434bd059da4efff865d1ef01bcc64ecbd903625dae1" +S = "${WORKDIR}/gst-plugins-base-${PV}" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend new file mode 100644 index 0000000..2f46ba3 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.2.3.bbappend @@ -0,0 +1,5 @@ +PACKAGECONFIG ??= " \ + ${@base_contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \ + ${@base_contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \ + ivorbis ogg theora vorbis \ + " diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc new file mode 100644 index 0000000..edaafe8 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good.inc @@ -0,0 +1,53 @@ +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 jpeg libpng soup speex taglib v4l2\ + " + +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,libgudev" +PACKAGECONFIG[libv4l2] = "--with-libv4l2,--without-libv4l2,libv4l2" +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" +PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libiec61883 libavc1394" +PACKAGECONFIG[v4l2] = "--enable-gst_v4l2,--disable-gst_v4l2" + +EXTRA_OECONF += " \ + --enable-oss \ + --disable-directsound \ + --disable-waveform \ + --disable-oss4 \ + --disable-sunaudio \ + --disable-osx_audio \ + --disable-osx_video \ + --disable-aalib \ + --disable-libcaca \ + --disable-libdv \ + --disable-shout2 \ + --disable-examples \ +" + +FILES_${PN}-equalizer += "${datadir}/gstreamer-1.0/presets/*.prs" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-gstrtpmp4gpay-set-dafault-value-for-MPEG4-without-co.patch new file mode 100755 index 0000000..d1973d4 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/decrease_asteriskh263_rank.patch new file mode 100755 index 0000000..288631b --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bb new file mode 100644 index 0000000..e7c5342 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bb @@ -0,0 +1,10 @@ +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" +SRC_URI[md5sum] = "1a1f96bc27ad446e559474299160a9a8" +SRC_URI[sha256sum] = "bfb33536a515bdcc34482f64b8d9cc3e47c753878b254923b419bc2f7485e470" +S = "${WORKDIR}/gst-plugins-good-${PV}" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend new file mode 100644 index 0000000..910b031 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.2.3.bbappend @@ -0,0 +1,5 @@ +PACKAGECONFIG ??= " \ + ${@base_contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \ + ${@base_contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \ + cairo flac gdk-pixbuf jpeg libpng soup speex taglib \ + " diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly.inc new file mode 100644 index 0000000..63ba316 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0001-asfdemux-asfpacket-specify-the-offset-by-an-amount-o.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0001-asfdemux-asfpacket-specify-the-offset-by-an-amount-o.patch new file mode 100644 index 0000000..b10e327 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0001-asfdemux-asfpacket-specify-the-offset-by-an-amount-o.patch @@ -0,0 +1,38 @@ +From 5dbb78388883e2f6e4525b0f322587aa090c3c72 Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Wed, 19 Jun 2013 14:10:07 +0900 +Subject: [PATCH 1/2] asfdemux/asfpacket: specify the offset by an amount of + filled buffer size when concatenating fragmented media objects + +This change is preliminary for inserting VC-1 startcodes of advanced +profile. To achieve this, the VC-1 startcode size is required to be +added to the amount of filled buffer size of a payload. As a result +the offset to concatenate fragmented media objects couldn't be determined +by mo_offset of an asfpacket, so the offset is specified as the amount +of filled buffer size instead, which will take account into the VC-1 +start code size. +--- + gst/asfdemux/asfpacket.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/gst/asfdemux/asfpacket.c b/gst/asfdemux/asfpacket.c +index f9b13fb..12eede8 100644 +--- a/gst/asfdemux/asfpacket.c ++++ b/gst/asfdemux/asfpacket.c +@@ -425,10 +425,10 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet, + "offset=%u vs buf_filled=%u", payload.mo_offset, + prev->buf_filled); + } +- gst_buffer_fill (prev->buf, payload.mo_offset, ++ gst_buffer_fill (prev->buf, prev->buf_filled, + payload_data, payload_len); +- prev->buf_filled = +- MAX (prev->buf_filled, payload.mo_offset + payload_len); ++ if ((payload.mo_offset + payload_len) > prev->buf_filled) ++ prev->buf_filled += payload_len; + GST_LOG_OBJECT (demux, "Merged media object fragments, size now %u", + prev->buf_filled); + } +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0002-asfdemux-asfpacket-set-frame-start-code-to-VC-1-adva.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0002-asfdemux-asfpacket-set-frame-start-code-to-VC-1-adva.patch new file mode 100644 index 0000000..2c81e1b --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly/0002-asfdemux-asfpacket-set-frame-start-code-to-VC-1-adva.patch @@ -0,0 +1,143 @@ +From 389480c0a11c134b963fe4d249d49549db519dec Mon Sep 17 00:00:00 2001 +From: Kazunori Kobayashi <kkobayas@igel.co.jp> +Date: Tue, 18 Jun 2013 12:28:32 +0900 +Subject: [PATCH 2/2] asfdemux/asfpacket: set frame start code to VC-1 advanced + profile stream + +VC-1 advanced profile constrains the bitstream format to pair +the frame data with the frame start code. +--- + gst/asfdemux/asfpacket.c | 73 ++++++++++++++++++++++++++++++++++++++++++++---- + 1 file changed, 67 insertions(+), 6 deletions(-) + +diff --git a/gst/asfdemux/asfpacket.c b/gst/asfdemux/asfpacket.c +index 12eede8..7b72aa0 100644 +--- a/gst/asfdemux/asfpacket.c ++++ b/gst/asfdemux/asfpacket.c +@@ -72,7 +72,7 @@ asf_packet_read_varlen_int (guint lentype_flags, guint lentype_bit_offset, + + static GstBuffer * + asf_packet_create_payload_buffer (AsfPacket * packet, const guint8 ** p_data, +- guint * p_size, guint payload_len) ++ guint * p_size, guint payload_len, gboolean need_st_code) + { + guint off; + +@@ -84,6 +84,39 @@ asf_packet_create_payload_buffer (AsfPacket * packet, const guint8 ** p_data, + *p_data += payload_len; + *p_size -= payload_len; + ++ /* set start code for VC-1 advanced profile */ ++ if (need_st_code && off >= 4) { ++ const guint8 *pos; ++ ++ pos = packet->bdata + off; ++ /* check if this packet has a start code */ ++ if (pos[0] != 0x00 || pos[1] != 0x00 || pos[2] != 0x01 || pos[3] != 0x0d) { ++ GstBuffer *subbuf; ++ GstMapInfo map; ++ ++ subbuf = gst_buffer_copy_region (packet->buf, GST_BUFFER_COPY_ALL, ++ off - 4, payload_len + 4); ++ if (subbuf == NULL) { ++ GST_ERROR ("Failed to create a sub-buffer"); ++ return NULL; ++ } ++ ++ if (!gst_buffer_map (subbuf, &map, GST_MAP_WRITE)) { ++ GST_ERROR ("Failed to create a gstbuffer mapping"); ++ return NULL; ++ } ++ ++ map.data[0] = 0x00; ++ map.data[1] = 0x00; ++ map.data[2] = 0x01; ++ map.data[3] = 0x0d; ++ ++ gst_buffer_unmap (subbuf, &map); ++ ++ return subbuf; ++ } ++ } ++ + return gst_buffer_copy_region (packet->buf, GST_BUFFER_COPY_ALL, off, + payload_len); + } +@@ -284,6 +317,9 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet, + gboolean is_compressed; + guint payload_len; + guint stream_num; ++ GstStructure *structure; ++ const gchar *fourcc; ++ gboolean need_st_code = FALSE; + + if (G_UNLIKELY (*p_size < 1)) { + GST_WARNING_OBJECT (demux, "Short packet!"); +@@ -363,6 +399,18 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet, + return TRUE; + } + ++ structure = gst_caps_get_structure (stream->caps, 0); ++ fourcc = gst_structure_get_string (structure, "format"); ++ if (fourcc) { ++ /* ++ * set start code for VC-1 advanced profile if fourcc is 'WVC1' and this ++ * packet is at the head of a payload. ++ */ ++ if (strncmp (fourcc, "WVC1", strlen ("WVC1")) == 0 ++ && payload.mo_offset == 0) ++ need_st_code = TRUE; ++ } ++ + if (G_UNLIKELY (!is_compressed)) { + GST_LOG_OBJECT (demux, "replicated data length: %u", payload.rep_data_len); + +@@ -397,7 +445,7 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet, + /* if the media object is not fragmented, just create a sub-buffer */ + GST_LOG_OBJECT (demux, "unfragmented media object size %u", payload_len); + payload.buf = asf_packet_create_payload_buffer (packet, p_data, p_size, +- payload_len); ++ payload_len, need_st_code); + payload.buf_filled = payload_len; + gst_asf_payload_queue_for_stream (demux, &payload, stream); + } else { +@@ -437,11 +485,24 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet, + "any previous fragment, ignoring payload"); + } + } else { ++ const guint8 st_code[] = { 0x00, 0x00, 0x01, 0x0d }; ++ + GST_LOG_OBJECT (demux, "allocating buffer of size %u for fragmented " + "media object", payload.mo_size); +- payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL); +- gst_buffer_fill (payload.buf, 0, payload_data, payload_len); +- payload.buf_filled = payload_len; ++ if ((payload_data[0] != 0x00 || payload_data[1] != 0x00 || ++ payload_data[2] != 0x01 || payload_data[3] != 0x0d) && ++ need_st_code) { ++ /* set start code for VC-1 advanced profile */ ++ payload.buf = ++ gst_buffer_new_allocate (NULL, payload.mo_size + 4, NULL); ++ gst_buffer_fill (payload.buf, 0, st_code, sizeof (st_code)); ++ gst_buffer_fill (payload.buf, 4, payload_data, payload_len); ++ payload.buf_filled = payload_len + sizeof (st_code); ++ } else { ++ payload.buf = gst_buffer_new_allocate (NULL, payload.mo_size, NULL); ++ gst_buffer_fill (payload.buf, 0, payload_data, payload_len); ++ payload.buf_filled = payload_len; ++ } + + gst_asf_payload_queue_for_stream (demux, &payload, stream); + } +@@ -483,7 +544,7 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet, + + if (G_LIKELY (sub_payload_len > 0)) { + payload.buf = asf_packet_create_payload_buffer (packet, +- &payload_data, &payload_len, sub_payload_len); ++ &payload_data, &payload_len, sub_payload_len, need_st_code); + payload.buf_filled = sub_payload_len; + + payload.ts = ts; +-- +1.8.1.2 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bb new file mode 100644 index 0000000..9c30d26 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bb @@ -0,0 +1,9 @@ +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 " +SRC_URI[md5sum] = "7ae60e2f759f58f32af5fcdc3c9193c4" +SRC_URI[sha256sum] = "537b0a7607eee499026388bb705b5b68985a3fd59fe22ee09accaf8cdf57eb3b" +S = "${WORKDIR}/gst-plugins-ugly-${PV}" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bbappend b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bbappend new file mode 100644 index 0000000..ca4f404 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.2.3.bbappend @@ -0,0 +1,8 @@ +PACKAGECONFIG ??= " \ + a52dec lame mad mpeg2dec \ + " + +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI += "file://0001-asfdemux-asfpacket-specify-the-offset-by-an-amount-o.patch \ + file://0002-asfdemux-asfpacket-set-frame-start-code-to-VC-1-adva.patch" diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc new file mode 100644 index 0000000..449809b --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0-plugins.inc @@ -0,0 +1,90 @@ +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 gobject-introspection + +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 + + +## HACK alert. These changes are needed to build the old source with newer tools + +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 " + +delete_pkg_m4_file() { + # This m4 file is out of date and is missing PKG_CONFIG_SYSROOT_PATH tweaks which we need for introspection + rm -f "${S}/common/m4/pkg.m4" || true +} + +do_configure[prefuncs] += " delete_pkg_m4_file" + +SRC_URI_append = " file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch" + +# This patch has 4 incarnations ... files, -base, -bad, -good +SRC_URI_append = " file://0001-Patch-Makefiles-to-use-PKG_CONFIG_SYSROOT_PATH.patch" + +# we need to pull down common to patch it ... yikes! +# autogen will clone common ... how evil +autogennoconf() { + cd ${S} + ./autogen.sh --noconfigure +} +do_patch[prefuncs] += "autogennoconf" + + +do_install_prepend() { + export GIR_EXTRA_LIBS_PATH="${B}/gst-libs/gst/tag/.libs:${B}/gst-libs/gst/video/.libs:${B}/gst-libs/gst/audio/.libs:${B}/gst-libs/gst/rtp/.libs:${B}/gst-libs/gst/sdp/.libs" +} + +do_compile_prepend() { + export GIR_EXTRA_LIBS_PATH="${B}/gst-libs/gst/tag/.libs:${B}/gst-libs/gst/video/.libs:${B}/gst-libs/gst/audio/.libs:${B}/gst-libs/gst/rtp/.libs:${B}/gst-libs/gst/sdp/.libs" +} diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0.inc b/common/recipes-multimedia/gstreamer/gstreamer1.0.inc new file mode 100644 index 0000000..d1bdba4 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0.inc @@ -0,0 +1,54 @@ +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 gobject-introspection + +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 \ + " + +acpaths = "-I ${S}/common/m4 -I ${S}/m4" + +delete_pkg_m4_file() { + # This m4 file is out of date and is missing PKG_CONFIG_SYSROOT_PATH tweaks which we need for introspection + rm -f "${S}/common/m4/pkg.m4" || true + # sed the §%"!& hardcoded libtool + cd ${S} + for i in gst/Makefile.in gst/Makefile.am libs/gst/controller/Makefile.in libs/gst/controller/Makefile.am libs/gst/base/Makefile.in libs/gst/base/Makefile.am \ + libs/gst/check/Makefile.in libs/gst/check/Makefile.am libs/gst/net/Makefile.in libs/gst/net/Makefile.am ; do + sed -i -e 's#--libtool=\"\$(top_builddir)/libtool\"#--libtool=\"\$(LIBTOOL)\"#g' $i + done + cd - + +} + +do_configure[prefuncs] += " delete_pkg_m4_file" + +do_install_prepend() { + export GIR_EXTRA_LIBS_PATH="${B}/gst/.libs:${B}/libs/gst/base/.libs" +} + +do_compile_prepend() { + export GIR_EXTRA_LIBS_PATH="${B}/gst/.libs:${B}/libs/gst/base/.libs" +} + +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/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-Fix-crash-with-gst-inspect.patch new file mode 100644 index 0000000..94f5cc5 --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/0001-gstinfo-Shorten-__FILE__-on-all-platforms.patch new file mode 100644 index 0000000..8213c4b --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/0002-basesink-Fix-QoS-lateness-checking-if-subclass-imple.patch new file mode 100644 index 0000000..1505cbe --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0/0003-basesink-Shouldn-t-drop-buffer-when-sync-false.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/0003-basesink-Shouldn-t-drop-buffer-when-sync-false.patch new file mode 100755 index 0000000..d682ee6 --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0/0003-basesink-Shouldn-t-drop-buffer-when-sync-false.patch @@ -0,0 +1,30 @@ +From 73df2b5c0aea58015788f5a94a3ec65296a688d3 Mon Sep 17 00:00:00 2001 +From: Song Bing <b06498@freescale.com> +Date: Thu, 2 Jul 2015 14:32:21 +0800 +Subject: [PATCH] basesink: Shouldn't drop buffer when sync=false + +Shouldn't drop buffer when sync=false + +Upstream-Status: Accepted + +https://bugzilla.gnome.org/show_bug.cgi?id=751819 +--- + libs/gst/base/gstbasesink.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c +index d44e8fc..cd759ac 100644 +--- a/libs/gst/base/gstbasesink.c ++++ b/libs/gst/base/gstbasesink.c +@@ -3423,7 +3423,7 @@ gst_base_sink_chain_unlocked (GstBaseSink * basesink, GstPad * pad, + if (G_UNLIKELY (stepped)) + goto dropped; + +- if (syncable && do_sync) { ++ if (syncable && do_sync && gst_base_sink_get_sync (basesink)) { + GstClock *clock; + + GST_OBJECT_LOCK (basesink); +-- +1.7.9.5 + diff --git a/common/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch b/common/recipes-multimedia/gstreamer/gstreamer1.0/inputselector-sticky-events-haven-t-send-out-when-ac-1-4-1.patch new file mode 100755 index 0000000..f50ce6f --- /dev/null +++ b/common/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/common/recipes-multimedia/gstreamer/gstreamer1.0_1.2.3.bb b/common/recipes-multimedia/gstreamer/gstreamer1.0_1.2.3.bb new file mode 100644 index 0000000..c9d3fea --- /dev/null +++ b/common/recipes-multimedia/gstreamer/gstreamer1.0_1.2.3.bb @@ -0,0 +1,16 @@ +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 = " \ + http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \ + file://0001-Fix-crash-with-gst-inspect.patch \ + file://0001-introspection.m4-prefix-pkgconfig-paths-with-PKG_CON.patch \ + " + +SRC_URI[md5sum] = "8155b9c7574ccaa361cc504e8e0e72dc" +SRC_URI[sha256sum] = "0f9a9817a384b3448c368c23345e5122435caef9c00f1c40d7b1953827b0d8eb" +S = "${WORKDIR}/gstreamer-${PV}" |